WPF简单绑定

时间:2011-09-25 11:24:40

标签: c# wpf xaml data-binding

我正在尝试将我的控制台应用程序转换为一个漂亮的WPF GUI。我对这段代码感到有些困惑,并想知道是否有人可以提供帮助?

在我的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 个答案:

答案 0 :(得分:2)

您是否设置了视图的datacontext? 在XAML文件的代码隐藏中,您需要执行以下操作:

this.DataContext = CL;

然后绑定是:

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

绑定将在DataContext中的对象上找到命名路径(即LoggedIn)。

编辑:默认绑定是单向的,这意味着它只能从您的ViewModel更新。
对于可以输入数据的控件(即:TextBox,CheckBox ...),您可以将Binding设置为“TwoWay”。 Binding表达式变为:

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

现在每当Checked状态在UI中发生变化时,它都会反映在ViewModel中。

答案 1 :(得分:2)

当你像这样使用Binding时,它会绑定到当前的DataContext,而不会绑定到页面本身。

解决此问题的最简单方法是在页面构造函数的末尾设置DataContext = this

解决问题的正确方法是使用MVVM。这意味着在另一个类的属性中使用ConnectionLibrary并将DataContext设置为此另一个类。

答案 2 :(得分:0)

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