WPF Simple Binding - PullRequest
       1

WPF Simple Binding

1 голос
/ 25 сентября 2011

Я пытаюсь преобразовать мое консольное приложение в хороший графический интерфейс WPF. Я немного застрял в этом коде и задавался вопросом, может ли кто-нибудь помочь?

В моем xaml у меня есть это:

<CheckBox IsChecked="{Binding CL.LoggedIn}"></CheckBox>

, чтобы попытаться связать значение флажка со значением CL.LoggedIn. CL - мой класс ConnectionLibrary.cs в указанной библиотеке классов.

В коде для страницы xaml я объявляю CL следующим образом:

public ConnectionLibrary CL = new ConnectionLibrary();

В классе библиотеки соединений я добавил: INotifyPropertyChanged к объявлению класса и добавил следующий код:

public event PropertyChangedEventHandler PropertyChanged;
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }
}

Я изменил свойство LoggedIn, чтобы оно теперь выглядело так:

private bool loggedIn;
public bool LoggedIn { 
    get { return loggedIn; } 
    set { loggedIn = value; OnPropertyChanged("LoggedIn"); }
}

Однако, похоже, это не работает в моем xaml? Я не получаю никаких ошибок привязки в окне вывода, но он не отражает значение LoggedIn правильно.

Есть идеи?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 25 сентября 2011

Вы установили datacontext своего представления? В коде вашего XAML-файла вам нужно сделать:

this.DataContext = CL;

тогда привязка:

<CheckBox IsChecked="{Binding LoggedIn}"></CheckBox>

Привязка найдет именованный путь (т. Е. LoggedIn) для объекта, который находится в DataContext.

РЕДАКТИРОВАТЬ : привязка по умолчанию односторонняя, это означает, что она обновляется только из вашей ViewModel.
Для элементов управления, которые могут быть введенными данными (например, TextBox, CheckBox ...), вы можете установить Binding как «TwoWay». Обязательное выражение становится:

<CheckBox IsChecked="{Binding LoggedIn, Mode="TwoWay"}"></CheckBox>

Теперь, когда состояние Checked изменяется в пользовательском интерфейсе, оно отражается в вашей ViewModel.

2 голосов
/ 25 сентября 2011

Когда вы используете Binding, как это, он привязывается к текущей DataContext, а не к самой странице.

Самый простой способ исправить это - установить DataContext = this в концеконструктор страницы.

Правильный способ исправить это - использовать MVVM .Это означало бы иметь ConnectionLibrary в свойстве другого класса и установить DataContext для этого другого класса.

0 голосов
/ 25 сентября 2011
<CheckBox IsChecked="{Binding LoggedIn}"></CheckBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...