C# 为什么wpf复选框绑定会失败?
例如,对有关复选框绑定的几个问题的回答表明C# 为什么wpf复选框绑定会失败?,c#,wpf,binding,C#,Wpf,Binding,例如,对有关复选框绑定的几个问题的回答表明 <checkbox IsChecked="{Binding Path=MyProperty, Mode=TwoWay}"/> 更新 3个很好的答案,非常感谢,我想全部接受,但我接受了第一个提到DataContext的答案,这是我最感兴趣的影响绑定方向的部分。双向模式已被证明是一种转移注意力的方式。 感谢MVVM的建议,我正在使用它,但希望此代码尽可能简单您应该实现INotifyPropertyChanged并将DataContext绑定
<checkbox IsChecked="{Binding Path=MyProperty, Mode=TwoWay}"/>
更新
3个很好的答案,非常感谢,我想全部接受,但我接受了第一个提到DataContext的答案,这是我最感兴趣的影响绑定方向的部分。双向模式已被证明是一种转移注意力的方式。
感谢MVVM的建议,我正在使用它,但希望此代码尽可能简单您应该实现INotifyPropertyChanged并将DataContext绑定到它,然后它就可以工作了 您可以在此处找到msdn链接:
但是,您应该查看模式MVVM来处理wpf/silverlight窗口。这将使您的生活更轻松:您应该实现INotifyPropertyChanged,并将DataContext绑定到它,然后它就可以工作了 您可以在此处找到msdn链接:
但是,您应该查看模式MVVM来处理wpf/silverlight窗口。这将使您的生活更轻松:实现INotifyPropertyChanged,并将DataContext设置为:
namespace TestBinding
{
public partial class Window1 : Window, INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(String _Prop)
{
if (PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
}
}
#endregion
bool property = true;
public Window1()
{
InitializeComponent();
this.DataContext = this;
}
public bool MyProperty
{
get
{
return property;
}
set
{
property = value;
RaisePropertyChanged("MyProperty");
}
}
}
}
实现INotifyPropertyChanged,并将DataContext设置为:
namespace TestBinding
{
public partial class Window1 : Window, INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(String _Prop)
{
if (PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
}
}
#endregion
bool property = true;
public Window1()
{
InitializeComponent();
this.DataContext = this;
}
public bool MyProperty
{
get
{
return property;
}
set
{
property = value;
RaisePropertyChanged("MyProperty");
}
}
}
}
您需要将DataContext设置为包含xaml绑定到的属性的对象。在您的情况下,只需将Datacontext=this;在狱中。以及实现INotifyPropertyChanged接口,并从每个绑定属性中提升PropertyChange
正如其他人已经说过的,最好使用MVVM模式,在这种模式中,您将属性存储在一个单独的类中,而不是将UI代码隐藏起来 您需要将DataContext设置为包含xaml绑定到的属性的对象。在您的情况下,只需将Datacontext=this;在狱中。以及实现INotifyPropertyChanged接口,并从每个绑定属性中提升PropertyChange
正如其他人已经说过的,最好使用MVVM模式,在这种模式中,您将属性存储在一个单独的类中,而不是将UI代码隐藏起来 您应该支持INotifyPropertyChanged接口,以便使binding workingBinding关键字仅适用于DataContext属性。我会将MyProperty属性移动到视图模型并将其绑定到视图。您应该支持INotifyPropertyChanged接口,以便保持binding workingBinding关键字仅与DataContext属性一起工作。我会将MyProperty属性移动到视图模型并将其绑定到视图。
namespace TestBinding
{
public partial class Window1 : Window, INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(String _Prop)
{
if (PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
}
}
#endregion
bool property = true;
public Window1()
{
InitializeComponent();
this.DataContext = this;
}
public bool MyProperty
{
get
{
return property;
}
set
{
property = value;
RaisePropertyChanged("MyProperty");
}
}
}
}