C# 已在Usercontrol上启用
我正在处理我的第一个用户控件,遇到了以下问题 更改绑定属性的值甚至不会调用属性getter(文本框会调用) 这种行为的原因是什么C# 已在Usercontrol上启用,c#,wpf,binding,C#,Wpf,Binding,我正在处理我的第一个用户控件,遇到了以下问题 更改绑定属性的值甚至不会调用属性getter(文本框会调用) 这种行为的原因是什么 <luc:IpTextBox x:Name="IpTxtBxIpv4Address" Grid.Row="1" Grid.Column="1" IsEnabled="{Binding VmNicData.EnableIpSetting}" Mode="IPv4Address"/> <TextBox x:Name="TxtBx
<luc:IpTextBox x:Name="IpTxtBxIpv4Address"
Grid.Row="1" Grid.Column="1"
IsEnabled="{Binding VmNicData.EnableIpSetting}"
Mode="IPv4Address"/>
<TextBox x:Name="TxtBxTest"
Grid.Row="1" Grid.Column="2"
IsEnabled="{Binding VmNicData.EnableIpSetting}"
Text="{Binding VmNicData.IpV4SubnetMask}"/>
谢谢,这是事先准备好的
到目前为止我所做的:
- 我的用户控件只包含一些文本框。我得到了DataContext=this;在初始化我的usercontroll之后
- 将IsEnabled static设置为true或false会对这些文本框产生预期效果
- 只要我尝试将其绑定到属性,它就根本不起作用(即使属性在开始时为false,但框不会被禁用)
- 我在未命中的属性上设置了断点李>
- 我添加了这个txtBxTest。看看绑定在那里是否有效。是的,breakpoint被击中了李>
已解决:我的错误是更改了datacontext(datacontext=在我的usercontrol的构造函数中)。这打破了我对父母的束缚 无论如何,感谢大家支持您已绑定到“EnableIpSetting”,但在更新属性时您不会调用OnPropertyChanged
您还需要将OnPropertyChanged逻辑添加到EnableIpSetting中。这是因为属性已更改的操作系统未在正确的上下文中启动,因此引发绑定对象的属性已更改。您发布的代码看起来名义上是正确的。所以,不管你有什么问题,都在你没有发布的代码中。请修复您的问题,使其包含可靠地再现问题的良好文档。此外,请解释到目前为止您在调试问题方面所做的工作,以及具体需要哪些帮助。什么是VmNicData?请显示您的完整代码。'VmNicData是我的ViewModel,它有几个属性,没有特殊的魔力。它在主VM中用作子VM。将向POST添加构造函数,但仍然看不到VmNicData类的属性。“更新时您没有调用OnPropertyChanged。”--是的,它们是。OP发布的视图模型类将
EnableIpSetting
实现为其他两个值的简单组合,\ipEnabled
和\dhcpEnabled
,当其中任何一个值发生更改时,它确实会为EnableIpSetting
引发属性更改事件(好吧,这似乎是从发布的代码中得到的……因为OP没有提供可靠地再现问题的良好工具,所以无法确认这一点)。
private bool _ipEnabled;
public bool IpEnabled
{
get => _ipEnabled;
set
{
_ipEnabled = value;
OnPropertyChanged(nameof(IpEnabled));
OnPropertyChanged(nameof(EnableIpSetting));
}
}
private bool _dhcpEnabled;
public bool DhcpEnabled
{
get => _dhcpEnabled;
set
{
_dhcpEnabled = value;
OnPropertyChanged(nameof(DhcpEnabled));
OnPropertyChanged(nameof(EnableIpSetting));
}
}
public bool EnableIpSetting => _ipEnabled && !_dhcpEnabled;