2016-11-18 8 views
0

私は、WPF ToolkitのCheckListBoxを使用して、ViewModelにバインドしようとしています。コントロールから選択した値を取得することに加えて、私はボタンのクリックによって任意の選択をクリアすることができるようにすることもできます。コレクションの各アイテムの選択状態やチェック状態をバインドする方法については固まっていますが、私の全体的なアプローチがオフであれば、それについてもある程度感謝しています。 ViewModelにでDrugInfluenceオブジェクトのコレクションと呼ばれるCheckListBoxをViewModelにバインドします。

public class DrugInfluence : INotifyPropertyChanged 
{ 
    public string Impairment { get; set; } 
    private bool isChecked; 

    public bool IsChecked 
    { 
     get { return isChecked; } 
     set 
     { 
      if(isChecked != value) 
      { 
       isChecked = value; 
       OnPropertyChanged("IsChecked"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

私は、文字列の記述子と私は、各チェックボックスの状態を示すために使用するために計画されたブール型プロパティを持つ単純なクラスを作成しました

...私はCheckListBox制御iteselfにバインドするImpairmentList ...

public List<DrugInfluence> ImpairmentList 
    { 
     get 
     { 
      return impairmentList; 
     } 
     set 
     { 
      if(impairmentList != value) 
      { 
       impairmentList = value; 
       NotifyPropertyChanged("ImpairmentList"); 
      } 
     }    
    } 

そして、私はCheckListBoxコントロールにビューモデルをバインドするために使用していXAML ...

 <sdk:CheckListBox Margin="6" 
          ItemsSource="{Binding ImpairmentList}" 
          DisplayMemberPath="Impairment" 
          SelectedMemberPath="IsChecked" 
          SelectedItemsOverride="{Binding SelectedImpairments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
     </sdk:CheckListBox> 

答えて

0

thisは使用しているコントロールですか?そうであれば、SelectedMemberPathはバインドするプロパティです。また、プログラムでチェック/チェックを外したい場合は、IsCheckedプロパティが変更されたときにイベントを発生させる必要があります。たとえば、その後、

public class DrugInfluence : INotifyPropertyChanged 
    { 
     public string Impairment { get; set; } 

     private bool _isChecked; 
     public bool IsChecked 
     { 
      get{ return _isChecked;} 
      set 
      { 
       if (_isChecked!= value) 
       { 
        _isChecked= value; 
        OnPropertyChanged("IsChecked"); 
       } 
      }; 
     } 
    } 

そしてはいそれはコントロールのINotifyPropertyChangedのメンバー

+0

の残りの部分を実装します。私のアプローチとしては、私はViewModelでINotifyPropertyChangedを実装していますが、DrugInfluenceクラス自体ではなく、私はViewModelのDrugInfluenceオブジェクトのコレクションのIsCheckedプロパティにSelectedMemberPathをバインドしようと考えていました。レイズイベント通知は私のところで気をつけていますか? – rudeboy

+0

DrugInfluenceでもINotifyPropertyChangedを実装する必要があります。 ObservableCollectionによって処理される唯一のことは、アイテムソースが変更された場合(つまり、新しいリストに設定された場合、またはアイテムが追加/削除された場合)です。リスト内の要素の変更は自動的には処理されません。 – SteveR

+0

IsCheckedプロパティをSelectedMemberPathにバインドすると、WPFにそのプロパティの変更をリスンするように指示します。それが変更されたことを伝えなければなりません。また、UIの更新も担当します。 – SteveR

関連する問題