gpt4 book ai didi

wpf - 逻辑组合依赖属性

转载 作者:行者123 更新时间:2023-12-04 15:37:19 25 4
gpt4 key购买 nike

我正在使用 C# 4.0 并创建了一个 DependencyObject MyView。

在 MyView 中,我有两个 DependencyProperties,PropA 和 PropB,它们都是 bool 值。

我想要第三个 DependencyProperty,PropC,也是一个 bool 值,简单地说,应该总是给我(PropA || PropB)。

  • 实现这一目标的最佳方法是什么?
  • 我也在考虑将 PropC 设为只读 DependencyProperty,但已阅读有关绑定(bind)到只读 dp (WPF ReadOnly Dependency Properties using MVVM)
  • 的问题

    最佳答案

    您可以使用 PropA 和 PropB 的 Dependency Property changed 回调来设置 PropC 的值(不要为 Dependency Properties 使用 CLR 属性包装器,因为它们永远不会被保证被调用)。

    如果你有这三个DP

    public static readonly DependencyProperty PropAProperty =
    DependencyProperty.Register("PropA",
    typeof(bool),
    typeof(MyView),
    new PropertyMetadata(false, PropAPropertyChanged));

    public static readonly DependencyProperty PropBProperty =
    DependencyProperty.Register("PropB",
    typeof(bool),
    typeof(MyView),
    new PropertyMetadata(false, PropBPropertyChanged));

    public static readonly DependencyProperty PropCProperty =
    DependencyProperty.Register("PropC",
    typeof(bool),
    typeof(MyView),
    new PropertyMetadata(false));

    public bool PropA
    {
    get { return (bool)this.GetValue(PropAProperty); }
    set { this.SetValue(PropAProperty, value); }
    }
    public bool PropB
    {
    get { return (bool)this.GetValue(PropBProperty); }
    set { this.SetValue(PropBProperty, value); }
    }
    public bool PropC
    {
    get { return (bool)this.GetValue(PropCProperty); }
    set { this.SetValue(PropCProperty, value); }
    }

    您可以像这样使用属性更改回调
    private static void PropAPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
    MyView myView = source as MyView;
    myView.OnPropChanged();
    }
    private static void PropBPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
    MyView myView = source as MyView;
    myView.OnPropChanged();
    }
    public void OnPropChanged()
    {
    PropC = PropA || PropB;
    }

    这样,您将始终更新 PropC 的值每次 PropAPropB变化

    另外, PropC不需要是 DP,如果您实现 INotifyPropertyChanged,它可以是普通的 CLR 属性.然后实现可以看起来像这样
    public void OnPropChanged()
    {
    OnPropertyChanged("PropC");
    }
    public bool PropC
    {
    get
    {
    return PropA || PropB;
    }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
    if (PropertyChanged != null)
    {
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    }

    你也可以绑定(bind) PropCPropAPropBMultiBinding .如果你也想要一个这样的例子,请告诉我

    关于wpf - 逻辑组合依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741130/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com