0

我正在编写一个 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 之外。

谢谢

4

1 回答 1

0

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

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

定义 ViewModel 属性后,您可能需要将 Binding 的 Mode 设置为 TwoWay,以便在底层 ViewModel 属性更改时更新 UI。

于 2012-07-20T11:02:53.610 回答