仅调用一次

时间:2015-06-22 06:48:33

标签: c# wpf dependency-properties

所以我刚刚实现了我的第一个usercontrol。它包含一个ComboBox,我想填充复选框。它会在数据网格的标题中重复出现。

组合框的ItemsSource通过我的usercontrol中的DependencyProperty公开。当我声明这个DependecyProperty时,我也传递一个回调,因为我想在将它传递给组合框之前准备它。这是在回调中完成的。

一切正常,绑定似乎有效,除了它们在底层集合发生变化时不会更新。我的底层集合是一个ObservableCollection,我的回调仅在声明集合时被调用(尽管我在添加项目后立即对属性进行了propertychanged调用)。

这是我的usercontrol代码:

public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource",typeof(ObservableCollection<RoomViewModel>),typeof(DataGridFilterControl),new PropertyMetadata(new PropertyChangedCallback(ItemsSourceChangedCallBack)));

    static private  void ItemsSourceChangedCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        DataGridFilterControl originator = d as DataGridFilterControl;
        if (originator != null)
        {
            originator.PopulateCheckBoxes();

        }


    }
    public ObservableCollection<RoomViewModel> ItemsSource
    {
        get
        {
            return (ObservableCollection<RoomViewModel>)GetValue(ItemsSourceProperty);
        }
        set
        {

            SetValue(ItemsSourceProperty,value);
        }
    }

ComboBox的xaml:

<ComboBox ItemsSource="{Binding Path=CheckBoxView}" />

正如您所看到的,ComboBox的ItemsSource与DependecyProperty不同。这是故意的。但是这不应该影响我的回调,对吗?

我将项目从另一个线程添加到集合中,因此使用Invoke方法在Dispatcher中进行(如果这有任何区别)。

如果在更改属性或调用propertychanged时,如何调用Callback?

0 个答案:

没有答案