2013-08-07 43 views
0

我目前有一个存储复选框值的布尔属性模型。当此值更改(选中/取消选中)时,我想显示或隐藏文本框。从MVVM Light捕获RaisePropertyChanged?

现在我的文本框的可见性属性在我的ViewModel中,而不是在我的模型中。我不知道如何告诉我的Visibility属性它应该显示/隐藏,因为复选框的值已更改。

我知道所有的属性,我有RaisePropertyChanged,我认为这将是我可以使用,但我不知道如何捕获它在我的ViewModel。

还是我接近这一切都错了?

回答

0

您的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; 
     } 
    } 
} 
+0

我有点混淆Chobo2模型来自构造函数的地方。我在MVVM Light视频中看到,我只是看着,是的,你的外观与视频显示的非常相似,但除非我误解了MVVM灯的创建者喜欢在模型中绑定的内容,以避免重复。你可以在9分钟左右看到这个视频http://channel9.msdn.com/events/MIX/MIX11/OPN03。 – chobo2

+0

如果您将视图直接绑定到模型,您的视图模型需要订阅“PropertyChanged”事件(构造函数中的模型是一个人为的简短示例)。或者在视图中使用值转换器(['BooleanToVisibilityConverter'](http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx))。 –