C# 已在Usercontrol上启用

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

我正在处理我的第一个用户控件,遇到了以下问题 更改绑定属性的值甚至不会调用属性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}"/>
谢谢,这是事先准备好的


到目前为止我所做的:

  • 我的用户控件只包含一些文本框。我得到了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;