代码之家  ›  专栏  ›  技术社区  ›  Brandon

WPF将依存属性绑定到ObservableCollection[重复]

  •  0
  • Brandon  · 技术社区  · 7 年前

    public static readonly DependencyProperty MasterListProperty = DependencyProperty.Register("MasterList", typeof(IEnumerable<MyObject>), typeof(MyControl), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(MasterListChanged)));
    

    我的对象实现了INotifyPropertyChanged。我正在尝试将此依存属性绑定到 ObservableCollection 关于那个物体。但是,当我向根集合中添加此依赖项属性绑定的项时,我没有得到任何更新。

    <image:MyControl MasterList="{Binding Path=SourceList, UpdateSourceTrigger=PropertyChanged}"></image:MyControl>
    

    Mode=TwoWay MasterListChanged 事件未被触发。

    1 回复  |  直到 7 年前
        1
  •  4
  •   mm8    7 年前

    但是,当我向根集合中添加此依赖项属性绑定的项时,我没有得到任何更新。

    你不应该这样做。这个 PropertyChangedCallback 仅当依赖项属性 它本身 设置为新值。当您添加 MyObject

    CollectionChanged 如果您想在添加或删除项目时执行某些操作,则为集合设置事件,例如:

    private static void MasterListChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var newCol = e.NewValue as INotifyCollectionChanged;
        if (newCol != null)
        {
            newCol.CollectionChanged += Coll_CollectionChanged;
        }
    
        var oldCol = e.OldValue as INotifyCollectionChanged;
        if (oldCol != null)
        {
            oldCol.CollectionChanged -= Coll_CollectionChanged;
        }
    }
    
    private static void Coll_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        //do something...
    }