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的值。
任何想法?
谢谢!
是否设置了视图的数据上下文?在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>