从MVVM Light捕获RaisePropertyChanged?

时间:2013-08-07 17:26:47

标签: c# .net windows-phone-7 mvvm mvvm-light

我目前有一个带有布尔属性的Model,它存储一个复选框值。当此值更改(选中/取消选中)时,我想显示或隐藏文本框。

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

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

或者我接近这一切都错了?

1 个答案:

答案 0 :(得分:0)

您的ViewModel应该充当模型和视图之间的门。看起来您的复选框直接绑定到模型。它应绑定到相应的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接口并且改变你的视图模型逻辑不是一个选项(IE你的视图直接绑定到模型的属性),你所能做的只是听取{的更改{1}}事件。

PropertyChanged