C# WPF简单绑定

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

我正在尝试将我的控制台应用程序转换为一个漂亮的WPF GUI。我有点被这段代码卡住了,想知道是否有人能帮忙

在我的xaml中,我有:

<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)。有关双向绑定,请参阅我的更新答案。