C# 复选框绑定属性未更改
我有以下代码C# 复选框绑定属性未更改,c#,.net,wpf,C#,.net,Wpf,我有以下代码 Namespace WpfApplication1 { using System.ComponentModel; using System.Runtime.CompilerServices; using WpfApplication1.Annotations; using WpfApplication1.Enums; public class MainWindowViewModel : INotifyPropertyChanged
Namespace WpfApplication1
{
using System.ComponentModel;
using System.Runtime.CompilerServices;
using WpfApplication1.Annotations;
using WpfApplication1.Enums;
public class MainWindowViewModel : INotifyPropertyChanged
{
private bool _isItemEnabled;
public MainWindowViewModel()
{
this.IsItemEnabled = false;
}
public event PropertyChangedEventHandler PropertyChanged;
public bool IsItemEnabled
{
get
{
return this._isItemEnabled;
}
set
{
this._isItemEnabled = value;
this.OnPropertyChanged(nameof(this.IsItemEnabled));
}
}
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
<CheckBox Grid.Row="0" Grid.Column="1" Margin="0,20"
IsChecked="{Binding Path = TimeIsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged }"
DataContext="{Binding ElementName = MainWindowViewModel}">
TestIsEnabled
</CheckBox>
命名空间WpfApplication1
{
使用系统组件模型;
使用System.Runtime.CompilerServices;
使用WpfApplication1.注释;
使用WpfApplication1.Enums;
公共类MainWindowViewModel:INotifyPropertyChanged
{
私人楼宇启用;
公共主窗口视图模型()
{
this.IsItemEnabled=false;
}
公共事件属性更改事件处理程序属性更改;
公共布尔值已启用
{
得到
{
返回此项。\u isItemEnabled;
}
设置
{
这是。_isItemEnabled=值;
this.OnPropertyChanged(name of(this.IsItemEnabled));
}
}
[NotifyPropertyChangedInvocator]
受保护的虚拟void OnPropertyChanged([CallerMemberName]字符串propertyName=null)
{
this.PropertyChanged?.Invoke(this,newpropertychangedeventargs(propertyName));
}
}
}
可证明
当我点击复选框时,位于代码隐藏文件上的属性TimeIsEnabled不会改变,它的断点也不会触发。我试图在视图模型中定位此属性,但结果相同。请帮助。尝试将模式从单向更改为双向(
Mode=TwoWay
)。如果您具有单向绑定,则属性会更新用户界面,但用户界面不会更新属性
<CheckBox Grid.Row="0" Grid.Column="1" Margin="0,20"
IsChecked="{Binding Path = TimeIsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }"
DataContext="{Binding ElementName = MainWindowViewModel}">
TestIsEnabled
</CheckBox>
您的
MainWindowViewModel
课程很好。我尝试了这个例子,效果很好。尝试将模式从单向更改为双向(Mode=TwoWay
)。如果您具有单向绑定,则属性会更新用户界面,但用户界面不会更新属性
<CheckBox Grid.Row="0" Grid.Column="1" Margin="0,20"
IsChecked="{Binding Path = TimeIsEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }"
DataContext="{Binding ElementName = MainWindowViewModel}">
TestIsEnabled
</CheckBox>
您的
MainWindowViewModel
课程很好。我尝试了此示例,但效果良好。问题出在DataContext中,但我在输出窗口System.Windows中仍然遇到错误。数据错误:40:BindingExpression路径错误:“在对象”“字符串”(HashCode=2067111156)上未找到TimeIsEnabled”属性。BindingExpression:Path=TimeIsEnabled;DataItem='String'(HashCode=2067111156);目标元素为“复选框”(名称=“”);目标属性为“IsChecked”(类型为“Nullable`1”),您是否在定义TimeIsEnabled属性的类中实现了INotifyPropertyChanged接口。也许这个链接会对你的问题有所帮助:关于你的错误,也许你可以在这个链接上找到一个解决方案:事实上,这是一个带有一个xaml文件和视图模型的测试应用程序,其中包含一个属性。问题出在DataContext中,但我仍然在Output window System.Windows中遇到错误。数据错误:40:BindingExpression路径错误:在“对象”“字符串”(HashCode=2067111156)上未找到“TimeIsEnabled”属性。BindingExpression:Path=TimeIsEnabled;DataItem='String'(HashCode=2067111156);目标元素为“复选框”(名称=“”);目标属性为“IsChecked”(类型为“Nullable`1”),您是否在定义TimeIsEnabled属性的类中实现了INotifyPropertyChanged接口。也许这个链接会对您的问题有所帮助:关于您的错误,也许您可以在这个链接中找到解决方案:事实上,这是一个测试应用程序,它有一个xaml文件和包含一个属性的视图模型