开发者

WPF Simple Binding

I'm trying to convert my console app to a nice WPF GUI. Am getting a little stuck on this code and was wondering if someone can help?

In my xaml I have this:

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

to try and bind the value of the checkbox to the value of CL.LoggedIn. CL is my ConnectionLibrary.cs class in a referenced class library.

In the code behind for the xaml page i declare CL as follows :

public ConnectionLibrary CL = new ConnectionLibrary();

In the connection library class I have added :INotifyPropertyChanged to the class declaration and added the following code:

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));
    }
}

I have changed the LoggedIn property to now look like this:

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

However, it doesnt seem to work in my xaml? I dont get any bi开发者_StackOverflow中文版nding errors in the output window, but it doesnt reflect the value of LoggedIn correctly.

Any ideas?

Thanks!


Have you set the datacontext of your view? In the code-behind of your XAML file, you need to do:

this.DataContext = CL;

then the binding is:

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

The binding will find the the named path (i.e. LoggedIn) on the object that is in the DataContext.

EDIT: The default binding is one-way, this means it only gets updated from your ViewModel.
For controls that can be inputed data (i.e: TextBox, CheckBox...) you can set the Binding as "TwoWay". The Binding expression becomes:

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

Now whenever the Checked state changes in the UI, it is reflected in your ViewModel.


When you use Binding like this, it binds to the current DataContext, not to the page itself.

The easiest way to fix this would be to set DataContext = this at the end of the constructor of the page.

The proper way to fix it would be to use MVVM. That would mean having ConnectionLibrary in a property of another class and set the DataContext to this other class.


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜