私は、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>
の残りの部分を実装します。私のアプローチとしては、私はViewModelでINotifyPropertyChangedを実装していますが、DrugInfluenceクラス自体ではなく、私はViewModelのDrugInfluenceオブジェクトのコレクションのIsCheckedプロパティにSelectedMemberPathをバインドしようと考えていました。レイズイベント通知は私のところで気をつけていますか? – rudeboy
DrugInfluenceでもINotifyPropertyChangedを実装する必要があります。 ObservableCollectionによって処理される唯一のことは、アイテムソースが変更された場合(つまり、新しいリストに設定された場合、またはアイテムが追加/削除された場合)です。リスト内の要素の変更は自動的には処理されません。 – SteveR
IsCheckedプロパティをSelectedMemberPathにバインドすると、WPFにそのプロパティの変更をリスンするように指示します。それが変更されたことを伝えなければなりません。また、UIの更新も担当します。 – SteveR