2016-05-19 3 views
0

私は現在MyVMと呼ばれるviewmodelオブジェクトを持っています。これはAllDataObjectsと呼ばれるデータオブジェクトのリストを保持し(、それはList<MyEntry>プロパティListOfEntriesとなります)、リストから現在選択されているデータオブジェクトを返すプロパティCurrentSelectionがあります。変更インスタンスを保持するプロパティのGridControlのBindingSource

選択した項目を変更するメカニズムが機能し、AllDataObjectsの異なるMyDataオブジェクトがCurrentSelectionプロパティに割り当てられます。

私はDevExpress GridControlがあり、DataBindingを参照する必要があります。MyVM.CurrentSelection.ListOfEntriesです。しかし、これを設定すると、バインディングは、CurrentSelectionが新しいMyDataオブジェクトインスタンスが割り当てられると、バインディングは古いオブジェクトへの参照しか知らないため、最初に割り当てられた要素を常に指します。

CurrentSelectonに格納されている同じMyDataインスタンスをリセットして再初期化せずに、このネストされたプロパティにグリッドをバインドする方法はありますか?

答えて

0

私はMyVMにインターフェイスINotifyPropertyChangedを実装し、自分のグリッドを保持しているUserControlにそのPropertyChangedイベントを聞かせることによってこれを行うことができました。

public class MyVMClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(String propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public List<MyData> AllDataObjects { get; set; } 

    private MyData CurrentSelection_ { get; set; } 
    public MyData CurrentSelection 
    { 
     get { return CurrentSelection_; } 
     set 
     { 
      CurrentSelection_ = value; 
      OnPropertyChanged(nameof(CurrentSelection)); 
     } 
    } 


    public MyVM(List<MyData> allDataObjects) 
    { 
     AllDataObjects = allDataObjects; 
    } 
} 

UserControlのコード内部:

public void Initialize(MyVMClass myVM) 
    { 
     MyVM = myVM; 
     MyVM.PropertyChanged += MyVM_PropertyChanged; 
     MyVM_PropertyChanged(); 
    } 

    private void MyVM_PropertyChanged(object sender=null, PropertyChangedEventArgs e=null) 
    { 
     if (e == null || e.PropertyName == nameof(MyVMClass.CurrentSelection)) 
     { 
      MyBindingSource.DataSource = MyVM.CurrentSelection.ListOfEntries; 
     } 
    } 
関連する問題