【问题标题】:how to provide change notification for a property when a subproperty changes?子属性更改时如何为属性提供更改通知?
【发布时间】:2013-12-10 20:43:19
【问题描述】:

这是一个非常基本的问题,但尽管绑定了这么多属性,但我认为我以前从未这样做过。我最初打算将一个名为 TimeScale 的类绑定到各种对象。
在 A 类中,我们有一个依赖属性,我想在其上调用更改通知。但是,更改通知不是通过此类手动完成的。

public TimeScale AxisTimeScale
{
    get { return (TimeScale)GetValue(AxisTimeScaleProperty); }
    set { SetValue(AxisTimeScaleProperty, value); }
}

public static readonly DependencyProperty AxisTimeScaleProperty =
    DependencyProperty.Register("AxisTimeScale",
        typeof(TimeScale), typeof(SignalPanel),
        new FrameworkPropertyMetadata(new TimeScale()));

this 绑定到源类 B

private class B
{
    private TimeScale _GraphTimeScale;

    public TimeScale GraphTimeScale
    {
        get { return _GraphTimeScale; }
        set
        {
            if (value != _GraphTimeScale)
            {
                _GraphTimeScale = value;
                OnPropertyChanged("GraphTimeScale");
            }
        }
    }
}

再看一遍,我想我真正想要的只是在依赖属性上调用 propertychanged,但由于我没有实现 Inotifypropertychanged,我想知道我是如何做到的。

我认为 DependencyObject 已经实现了 Inotifypropertychanged,所以我可以访问这个:

OnPropertyChanged(new DependencyPropertyChangedEventArgs(property, old value, new value));

但是,将同一个对象同时插入旧值和新值槽会导致 PropertyChanged 事件不会触发(我假设实现会在触发事件之前检查这两个值是否相同)。如果可能的话,我想避免创建一个新对象。我想一种选择是覆盖 OnPropertyChanged。不,这还需要我有一个依赖属性更改事件参数。

【问题讨论】:

  • 请注意,如果您想说所有属性值都可能已更改,则可以引发以null 作为属性名称更改的属性。当某些事情影响大量属性并且您希望在应用所有更改后发送单个通知而不是在进行每个部分更改时逐步通知时,这很有用。

标签: c# wpf binding


【解决方案1】:

订阅NumberOfUnitsPropertyChanged 通知,然后在属性更改事件处理程序中引发OnPropertyChanged("GraphTimeScale")

如果有更好的方法会很感兴趣。

【讨论】:

    【解决方案2】:

    更新

    OnPropertyChanged("TimeScale");
    

    OnPropertyChanged("GraphTimeScale");
    

    或者,

    您可以用ObservableObject 包装TimeScale 类,以便您可以订阅对象更改事件并从那里引发它们。

    更多信息:http://msdn.microsoft.com/en-us/library/ff653818.aspx

    【讨论】:

    • 我认为我的问题中没有足够的数据。打算修改一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2021-08-25
    • 2018-08-01
    相关资源
    最近更新 更多