C# WPF简单绑定
我正在尝试将我的控制台应用程序转换为一个漂亮的WPF GUI。我有点被这段代码卡住了,想知道是否有人能帮忙 在我的xaml中,我有:C# WPF简单绑定,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我正在尝试将我的控制台应用程序转换为一个漂亮的WPF GUI。我有点被这段代码卡住了,想知道是否有人能帮忙 在我的xaml中,我有: <CheckBox IsChecked="{Binding CL.LoggedIn}"></CheckBox> 在连接库类中,我添加了:INotifyPropertyChanged到类声明中,并添加了以下代码: public event PropertyChangedEventHandler PropertyChanged; // Cre
<CheckBox IsChecked="{Binding CL.LoggedIn}"></CheckBox>
在连接库类中,我添加了: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的值
有什么想法吗
谢谢
<CheckBox IsChecked="{Binding LoggedIn}"></CheckBox>
是否设置了视图的数据上下文? 在XAML文件的代码隐藏中,您需要执行以下操作:
this.DataContext = CL;
那么绑定是:
<CheckBox IsChecked="{Binding LoggedIn}"></CheckBox>
绑定将在DataContext中的对象上找到命名路径(即LoggedIn)
编辑:默认绑定是单向的,这意味着它只能从ViewModel更新。对于可以输入数据的控件(即:文本框、复选框…),可以将绑定设置为“双向”。绑定表达式变为:
<CheckBox IsChecked="{Binding LoggedIn, Mode="TwoWay"}"></CheckBox>
现在,只要用户界面中的选中状态发生变化,它就会反映在您的ViewModel中。您是否设置了视图的datacontext? 在XAML文件的代码隐藏中,您需要执行以下操作:
this.DataContext = CL;
那么绑定是:
<CheckBox IsChecked="{Binding LoggedIn}"></CheckBox>
绑定将在DataContext中的对象上找到命名路径(即LoggedIn)
编辑:默认绑定是单向的,这意味着它只能从ViewModel更新。对于可以输入数据的控件(即:文本框、复选框…),可以将绑定设置为“双向”。绑定表达式变为:
<CheckBox IsChecked="{Binding LoggedIn, Mode="TwoWay"}"></CheckBox>
现在,只要用户界面中的选中状态发生变化,它就会反映在您的ViewModel中。当您像这样使用
Binding
时,它会绑定到当前的DataContext
,而不是页面本身
解决此问题的最简单方法是在页面构造函数的末尾设置DataContext=this
修复它的正确方法是使用。这意味着在另一个类的属性中有
ConnectionLibrary
,并将DataContext
设置为另一个类。像这样使用Binding
时,它绑定到当前的DataContext
,而不是页面本身
解决此问题的最简单方法是在页面构造函数的末尾设置DataContext=this
修复它的正确方法是使用。这意味着在另一个类的属性中有
ConnectionLibrary
,并将DataContext
设置为另一个类。您不应该像使用CL
一样使用公共字段。请阅读。您不应该使用公共字段,正如您对CL
所做的那样。阅读.Excellent-我只是在阅读代码以查找datacontext的设置位置,这里是:=)假设我想将datacontext保留在codebehind文件中,因为我想将其他几个类的数据聚合到该文件中。那么,我如何链接到CL.LoggedIn并在属性发生变化时保持绑定工作?我不确定我是否理解您在上一次评论中提出的问题。您的代码应该是干净的,只需设置datacontext。逻辑应该在ViewModel中(并且应该实现INotifyPropertyChanged)。查看我更新的双向绑定答案。非常好-我只是在阅读代码以找到datacontext的设置位置,这里是:=)假设我想将datacontext保留到codebehind文件,因为我想将其他几个类中的数据聚合到该文件中。那么,我如何链接到CL.LoggedIn并在属性发生变化时保持绑定工作?我不确定我是否理解您在上一次评论中提出的问题。您的代码应该是干净的,只需设置datacontext。逻辑应该在ViewModel中(并且应该实现INotifyPropertyChanged)。有关双向绑定,请参阅我的更新答案。