不要在ChangePropertycallback中更改属性

时间:2012-12-08 08:47:39

标签: wpf listview dependency-properties icollectionview itemsource

我有ListView并绑定ItemSourceICollectionView属性,并将所选项绑定到dp属性。

 public static readonly DependencyProperty SelectedProperty =
      DependencyProperty.Register("Selected",
                                  typeof(Myclass),
                                  typeof(MyControl), new PropertyMetadata(SelectedContactChange));


    static void SelectedContactChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MyControlcontrol = d as MyControl;
        control.MYView = CollectionViewSource.GetDefaultView(((Myclass)e.NewValue).Numbers);
    }

我有另一个列表视图和绑定项目源到MYView属性。

 ICollectionView _myView;
    public ICollectionView MYView
    {
        get { return _myView; }
        set
        {
            _myView= value;
        }
    }

更改SelectedProperty时我为MYView设置了值,但是在listview中没有显示与MYView绑定的新值!!!

更改SelectedProperty时如何更改MYView属性?

1 个答案:

答案 0 :(得分:0)

不是100%肯定,但我猜你的ListView的ItemsSource绑定到MyControl类的MYView属性,可能是这样的:

<MyControl x:Name="myControl" ... />
<ListView ItemsSource="{Binding MYView, ElementName=myControl}" />

当您现在更改MYView属性的值时,没有机制通知绑定更改。您应该实施INotifyPropertyChanged并在MYView更改时提升PropertyChanged事件:

public class MyControl : UserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ICollectionView MYView
    {
        get { return _myView; }
        set
        {
            _myView = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("MYView"));
            }
        }
    }
}

或者,您可以将MYView定义为另一个依赖项属性。