ViewModel は、Model と View の間のゲートとして機能する必要があります。チェックボックスがモデルに直接バインドされているようです。モデルに対する適切な値へのコンダクトとして機能する、対応する View Model プロパティにバインドする必要があります。例 (免責事項: 私は MVVM Light を使用していませんが、ほとんどの MVVM フレームワークについては自明のはずです):
public class Chobo2
{
public bool IsChecked {get;set;}
}
public class Chobo2ViewModel // Your base class and interfaces
{
private Chobo2 model;
public bool IsChecked
{
get { return model.IsChecked; }
set
{
if(model.IsChecked == value) return;
model.IsChecked = value;
RaisePropertyChanged("IsChecked");
RaisePropertyChanged("Visibility");
}
}
public System.Windows.Visibility Visibility
{
get
{
return IsChecked
? System.Windows.Visibility.Visible
: System.Windows.Visibility.Collapsed;
}
}
}
モデル自体がINotifyPropertyChanged
インターフェイスを実装していて、ビュー モデルのロジックを変更できない場合 (つまり、ビューがモデルのプロパティに直接バインドされている場合)、できることはPropertyChanged
イベントの変更をリッスンすることだけです。
// Assume the Chobo2 class implements INPC
public class Chobo2ViewModel // Your base class and interfaces
{
private Chobo2 model;
public Chobo2ViewModel(Chobo2 model)
{
// Should check for null here
this.model = model;
this.model.PropertyChanged += (sender, args) =>
{
if(args.PropertyName == "IsChecked")
RaisePropertyChanged("Visibility")
}
}
public System.Windows.Visibility Visibility
{
get
{
return model.IsChecked
? System.Windows.Visibility.Visible
: System.Windows.Visibility.Collapsed;
}
}
}