0

我有ListView並將ItemSource綁定到ICollectionView屬性,並將所選項綁定到dp屬性。請勿更改ChangePropertycallback中的屬性

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); 
    } 

和我有另一個列表視圖和綁定itemsource到MYView屬性。

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

當更改SelectedProperty我爲MYView設置的值,但不顯示與MYView綁定的列表視圖中的新值!

如何更改MYView屬性時更改SelectedProperty?

+0

當你直接爲綁定源指定值然後綁定崩潰 – ethicallogics

+0

「我想設置MYView,但不改變MYView」,這是什麼意思?請更精確。 – Clemens

+0

你應該這樣做,就像將selectedItem綁定到viewmodel中的某個屬性,然後在VM中執行你在這裏做的操作併爲其賦值MYView – ethicallogics

回答

0

不是100%肯定,但我猜你的ListView的ItemsSource綁定到你的MyControl類的MYView財產,也許是這樣的:

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

如果現在改變MYView屬性的值,有沒有任何機制可以通知更改的綁定。您應該實現INotifyPropertyChanged,提高PropertyChanged事件時MYView變化:

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另一個依賴項屬性。

+0

謝謝,我有一個自定義控件,並使用RelativeSource = {RelativeSource TemplatedParent}爲listview ...我使用PropertyChanged但不顯示新項目。 – Niloo

+0

問題是一樣的,必須通知綁定。想想看。 – Clemens

+0

非常感謝...我使用MYView的依賴項屬性。 – Niloo