IsEnabled on Usercontrol

时间:2018-01-18 11:53:08

标签: c# wpf binding

我正在努力完成我的第一个用户控制问题 更改绑定属性的值甚至不会调用属性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;在初始化我的usercontroll之后。

  • 将IsEnabled static设置为true或false会对这些texbox产生预期的影响。

  • 一旦我尝试将它绑定到属性它就根本不起作用(即使在启动时,属性为false,也不会禁用)。
  • 我在没有命中的属性上设置断点。
  • 我添加了这个txtBxTest。看看Binding是否在那里工作。确实如此,breackpoint被击中了。
  

已解决:我的错误是更改了datacontext(我的usercontrol的构造函数中的DataContext = this)。这破坏了我对父母的约束力。

无论如何,谢谢大家支持

1 个答案:

答案 0 :(得分:-1)

您已绑定到“EnableIpSetting”,但在更新时您没有调用OnPropertyChanged。

您还需要将OnPropertyChanged逻辑添加到EnableIpSetting。