【问题标题】:IsEnabled on Usercontrol用户控件上的 IsEnabled
【发布时间】: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 类的属性。

标签: c# wpf binding


【解决方案1】:

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

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

【讨论】:

  • “你没有在更新时调用 OnPropertyChanged。” -- 是的。 OP 发布的视图模型类将 EnableIpSetting 简单地实现为两个其他值的组合,_ipEnabled_dhcpEnabled,并且它确实EnableIpSetting 引发 PropertyChanged 事件其中已更改(嗯,它 似乎 来自发布的代码...由于 OP 没有费心提供可靠地重现问题的良好 minimal reproducible example,因此无法确认那个)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多