【发布时间】:2018-06-27 11:47:50
【问题描述】:
我正在处理我的第一个用户控件 ang 遇到以下问题 更改绑定属性的值甚至不会调用属性 getter(文本框会) 这种行为的原因是什么?
<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}"/>
视图模型:
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;
提前致谢
到目前为止我做了什么:
我的用户控件只包含一些文本框。我有那个 DataContext = this;在初始化我的用户控件之后。
将 IsEnabled 静态设置为 true 或 false 会对这些 texbox 产生预期效果。
- 当我尝试将它绑定到属性时,它根本不起作用(即使属性在开始时为 false,texbox 也不会被禁用)。
- 我在没有命中的属性上设置了一个断点。
- 我添加了这个 txtBxTest。看看绑定是否在那里工作。确实,断点被击中。
已解决:我的错误是更改了数据上下文(DataContext = this 在我的用户控件的构造函数中)。这打破了我对父母的约束。
谢谢大家的支持
【问题讨论】:
-
这是因为属性改变了 os 没有在正确的上下文中触发引发属性更改为绑定对象
-
您发布的代码名义上看起来是正确的。所以,无论你有什么问题,它都在你没有发布的代码中。请解决您的问题,以便它包含一个很好的minimal reproducible example,它可以可靠地重现问题。另外,请说明您迄今为止为调试问题所做的工作,以及具体您需要哪些帮助。
-
什么是 VmNicData?请出示您的完整代码。'
-
VmNicData 是我的 ViewModel 它有几个属性,没有什么特别的魔力。它用作主 VM 中的子 VM。将构造函数添加到 post
-
我仍然看不到 VmNicData 类的属性。