如何更改ViewModel属性的属性并使更改反映在绑定控件上?

时间:2012-07-20 10:50:57

标签: windows-phone-7 data-binding

我正在写一个Windows Phone应用程序;作为一个好公民,我正在使用MVVM模式:)在MVVM中不是那么专家,我遇到了以下问题,希望我能在这里找到解决方案。

我有以下代码:

XAML

<Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{Binding MyPOCO}">
    <StackPanel>
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding IsActive}"/>
    </StackPanel>
</Grid>

代码背后

this.DataContext = new ViewModel();

视图模型

public class ViewModel : ViewModelBase
{
    private POCO myPOCO;

    public ViewModel()
    {
        this.myPOCO = new POCO();
        this.ToggleActiveStatusCommand = new RelayCommand(this.ToggleActiveStatus);
    }

    public POCO MyPOCO
    {
        get
        {
            return this.myPOCO;
        }
    }

    public RelayCommand ToggleActiveStatusCommand { get; private set; }

    private void ToggleActiveStatus()
    {
        this.MyPOCO.IsActive = !this.MyPOCO.IsActive;
        System.Diagnostics.Debug.WriteLine(this.MyPOCO.IsActive);
        this.RaisePropertyChanged("MyPOCO");
    }
}

POCO

public class POCO
{
    public string Name { get; set; }
    public bool IsActive { get; set; }
}

我想要实现的是改变TextBlock文本,因为IsActive的值发生了变化......怎么做?我的意思是除了将POCO所需的属性作为属性暴露给ViewModel。

由于

1 个答案:

答案 0 :(得分:0)

我认为您必须在ViewModel中实现调用POCO属性的属性,除非您在POCO中实现INotifyPropertyChanged,然后针对MVVM,模型应该只保存数据,而ViewModel是链接模型的粘合剂与视图。

在ViewModel中创建属性可能看起来有很多额外的工作,但它确实增加了能够基于单个模型定义许多ViewModel的好处。因此,在特定的ViewModel中,您只公开所需的属性,而不是模型可以为您提供的所有内容。

一旦定义了ViewModel属性,您可能需要将Binding的模式设置为TwoWay,以便在基础ViewModel属性发生更改时更新UI。