用户控件中的NotifyPropertyChanged

时间:2012-11-23 18:55:38

标签: wpf user-controls inotifypropertychanged

我是WPF的新手,我的应用程序中有一个用户控件,它具有List类型的依赖属性。

在我的窗口中,我放置了该用户控件并将此DP绑定到我视图列表的属性。

最终属性会更改,因此集合会更改,但不会反映在用户控件上。

我的视图实现了INotifyPropertyChanged接口。

我的用户控件的DP不会引发属性更改事件。

可能的原因是什么?

我的用户控件中的依赖项属性的代码

  public List<ItemsResult> ItemsCollection
    {
        get { return (List<ItemsResult>)GetValue(ItemsCollectionProperty); }
        set { SetValue(ItemsCollectionProperty, value); }
    }

    public static readonly DependencyProperty ItemsCollectionProperty =
        DependencyProperty.Register("ItemsCollection", typeof(List<ItemsResult>), typeof(ListingUserControl)
                                    , new FrameworkPropertyMetadata(null, ItemsCollectionChanged));

    private static void ItemsCollectionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs eventArgs)
    {
        var listingUserControl = (obj as ListingUserControl);
        var itemsResult = (eventArgs.NewValue as List<ItemsResult>);
        if (listingUserControl != null && itemsResult != null)
            listingUserControl.CountLabelVisible = itemsResult.Count > 0;
    }

在我看来绑定

 <my:ListingUserControl ItemsCollection="{Binding Clients}" Title="Client" />

1 个答案:

答案 0 :(得分:0)

在这种情况下,像HighCore写的那样,它不会在collectionchange的情况下触发任何事件,但只在绑定更改时触发一次。你可以做的是,检查有界集合实现INotifyCollectionChanged的天气。像:

var itemsResult = (eventArgs.NewValue as INotifyCollectionChanged);
if (itemsResult != null)
{ 
   itemsResult.CollectionChanged += OnItemsSourceCollectionChanged;
}

然后您可以监控集合更改。