-->

为什么不更新的ObservableCollection是在项目改变?(Why ObservableC

2019-09-19 04:13发布

我注意到ObservableCollection在WPF只反映通过编辑它添加或删除列表中的项目,而不是在GUI变化。

这意味着,我必须写我的自定义类MyObservableCollection代替。 什么是这种行为的原因是什么?

谢谢

Answer 1:

本的ObservableCollection没有办法知道,如果你改变它包含的对象的方式 - 如果你希望收到这些对象时再改,你必须使这些对象可观察到的,以及(例如,通过具有这些对象执行INotifyPropertyChanged)



Answer 2:

实现这一目标的另一种方法是,你实现一个自DependencyObject派生的新XXXViewModel类,你把此人在的ObservableCollection。

该看看这个非常好的MVVM介绍: http://blog.lab49.com/archives/2650

为这样的类的例子是:

public class EntryViewModel : DependencyObject
{
    private Entry _entry;
    public EntryViewModel(Entry e)
    {
        _entry = e;
        SetProperties(e);
    }

    private void SetProperties(Entry value)
    {

        this.Id = value.Id;
        this.Title = value.Title;
        this.CreationTimestamp = value.CreationTimestamp;
        this.LastUpdateTimestamp = value.LastUpdateTimestamp;
        this.Flag = value.Flag;
        this.Body = value.Body;
    }


    public Entry Entry
    {
        get {
            SyncBackProperties();
            return this._entry;
        }
    }


    public Int64 Id
    {
        get { return (Int64)GetValue(IdProperty); }
        set { SetValue(IdProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Id.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty IdProperty =
        DependencyProperty.Register("Id", typeof(Int64), typeof(EntryViewModel), new UIPropertyMetadata(new Int64()));

}}

这里重要的东西 - 它自DependencyObject派生 - 它DependencyProperties支持WPFs绑定操作

BR sargola



Answer 3:

你可以注册aginst数据类对象的PropertyChanged事件视图模型类中的方法,并听取他们的意见在查看模型时的数据对象的属性的任何变化的发生。 这是在视图模型的控制非常简单和直接的方式,当可观察到的集合更改的项目。 希望这可以帮助...



Answer 4:

可能是因为项目没有办法提醒,当他们编辑的集合 - 即它们可能没有观察到。 其他类将有类似的行为 - 没办法,提醒您在引用类的图表中的每一个变化。



Answer 5:

作为变通,你可以提取从收集的对象,然后将其重新插入你处理完之后。 根据您的要求和并发模型,这可能只是使程序难看,虽然。 这是一个快速的黑客,而不是适用于任何需要的品质。

相反,你可以实现与具体触发ContentChanged(不知道名字)事件的更新方法集合。 这不是很漂亮,但它至少是很容易对付的。

理想的情况下,作为kragen2uk说,这将是最好的,使物体观察到的,让你的客户端代码干净和简单。

也看到了这个问题 。



文章来源: Why ObservableCollection is not updated on items change?