WPF简单绑定

本文关键字:绑定 简单 WPF | 更新日期: 2023-09-27 18:09:51

我正试图将我的控制台应用程序转换为一个漂亮的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的值。

任何想法?

谢谢!

WPF简单绑定

是否设置了视图的数据上下文?在XAML文件的后台代码中,需要执行以下操作:

this.DataContext = CL;

则绑定为:

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

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

EDIT:默认绑定是单向的,这意味着它只从你的ViewModel更新。
对于可以输入数据的控件(例如:TextBox, CheckBox…),你可以将绑定设置为"two - way"。Binding表达式变成:

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

现在,无论何时UI中的Checked状态发生变化,它都会反映在ViewModel中。

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

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

修复它的正确方法是使用MVVM。这意味着将ConnectionLibrary置于另一个类的属性中,并将DataContext设置为另一个类。

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