Привязка к IsEnabled

258
13 февраля 2017, 13:15

XAML часть:

<TextBlock x:Name="myGroup" IsEnabled="{Binding Enable}"></TextBlock>

Описываю свойство, выше класс наследуется от интерфейса INotifyPropertyChanged (public partial class Index : Window, INotifyPropertyChanged):

public event PropertyChangedEventHandler PropertyChanged;
public bool _enable;
public bool Enable
{
    get { return _enable; }
    set
    {
        _enable = value;
        PropertyChanged(this, new PropertyChangedEventArgs(nameof(Enable)));
    }
}

Создаю метод проверки, есть ли запись в БД, исходя из результата проверки должно изменяться значение IsEnabled:

public void CheckEnable(bool result)
{
    string connectionString = "SERVER = localhost; DATABASE = vbnzt; UID = vbnz; PASSWORD = ;";
    MySqlConnection connection = new MySqlConnection(connectionString);
    MySqlCommand check_group = new MySqlCommand("SELECT * FROM groups WHERE liderId = " + Properties.Settings.Default.id.ToString(), connection);
    connection.Open();
    MySqlDataReader cg_result = check_group.ExecuteReader();
    if (cg_result.HasRows)
    {
        result = true;
    }
    else
    {
        result = false;
    }
    _enable = result;
    connection.Close();
}

Вызываю проверку перед загрузкой контента (в методе MainWindow_Loaded, который привязан к this.Loaded += MainWindow_Loaded; в конструкторе):

CheckEnable(_enable);

В другом классе (кликая по кнопке), вызываю проверку, передавая туда значение true:

Index index = new Index();
index.CheckEnable(true);

Нужно чтобы при клике по этой кнопке без перезагрузки приложения изменялось значение IsEnabled у ТекстБлока.

Answer 1

Вообще если уже начали с биндами работать- делайте по паттерну mvvm, по началу будет сложным, кода станет больше, но со своего личного опыта скажу, что данными намного легче управлять станет. И да, в свойстве вы поднимаете событие propertychanged? В xaml

 <TextBlock x:Name="myGroup" IsEnabled="{Binding Enable, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">.

UpdateSourceTrigger=PropertyChanged - слушает событие

        public void NotifyPropertyChanged([CallerMemberName] string property = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }

Этот метод надо вызывать на Set свойства.

READ ALSO
Как получить текст контрола по хендлу

Как получить текст контрола по хендлу

У меня есть хендл контрола, мне нужно получить текст, который он содержит, однако WM_GETTEXT возвращает пустую строку, я предполагаю, что в приложении,...

251
Как сделать проверку аргумента в лямбда выражении?

Как сделать проверку аргумента в лямбда выражении?

Нужно чтоб проверка деления на ноль находилась внутри лямбда виражения !

253
Как сделать свой код непонятным для других? [требует правки]

Как сделать свой код непонятным для других? [требует правки]

Я писал свое приложение, придерживаясь правил хорошего тона, но потом меня осенило:

288
Убрать &ldquo;web&rdquo; из адреса в Yii2

Убрать “web” из адреса в Yii2

На хостинге установлен yii2-basic, установлен не в корень, а в htdocs/basic

394