您的ViewModel應該充當您的模型和視圖之間的門戶。它看起來像你的複選框直接綁定到模型。它應該被綁定到相應的視圖模型屬性上,該屬性將作爲您的模型適當值的行爲。例如(免責聲明:我沒有用過MVVM光,但它應該是多數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
接口,並改變你的視圖模型的邏輯是不是選項(IE的視圖直接綁定到模型的屬性),所有你可以做的就是聽取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;
}
}
}
我有點混淆Chobo2模型來自構造函數的地方。我在MVVM Light視頻中看到,我只是看着,是的,你的外觀與視頻顯示的非常相似,但除非我誤解了MVVM燈的創建者喜歡在模型中綁定的內容,以避免重複。你可以在9分鐘左右看到這個視頻http://channel9.msdn.com/events/MIX/MIX11/OPN03。 – chobo2
如果您將視圖直接綁定到模型,您的視圖模型需要訂閱「PropertyChanged」事件(構造函數中的模型是一個人爲的簡短示例)。或者在視圖中使用值轉換器(['BooleanToVisibilityConverter'](http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx))。 –