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

Windows phone 7 如何更改ViewModel属性的属性并使更改反映在绑定控件上?,windows-phone-7,data-binding,Windows Phone 7,Data Binding,我正在编写一个windows Phone应用程序;作为一个好公民,我正在使用MVVM模式:)由于我不是MVVM方面的专家,我面临着以下问题,我希望我能在这里找到解决方案 我有以下代码: XAML <Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{Binding MyPOCO}"> <StackPanel> <TextBlock Text="{Binding Nam

我正在编写一个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>
视图模型

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; }
}
我试图实现的是随着IsActive值的更改而更改TextBlock文本。。。怎么做?我的意思是,除了将POCO中所需的属性作为属性公开给ViewModel之外


谢谢

我认为您必须在ViewModel中实现调用POCO属性的属性,除非您在POCO中实现INotifyPropertyChanged,这与MVVM背道而驰,在MVVM中,您的模型应该只保存数据,而您的ViewModel是连接模型与视图的粘合剂

在ViewModel中创建属性似乎需要很多额外的工作,但它确实增加了能够基于单个模型定义多个ViewModel的好处。因此,在特定的ViewModel中,只显示所需的属性,而不是模型可以提供的所有内容


定义ViewModel属性后,可能需要将绑定模式设置为双向,以便在基础ViewModel属性更改时可以更新UI。

我不能说:在我的DataContext更改时重新绑定所有内容;类似于我在
this.RaisePropertyChanged(“MyPOCO”)
中尝试执行的操作?如果您为ViewModel实例创建了一个变量,您可以设置正在执行的DataContext,然后更改POCO,然后将DataContext设置为NULL,然后将DataContext设置回您的变量,这会重新绑定,因此会显示更改。我不太明白。谁将把DataContext设置为NULL?我无法从我的ViewModel访问它,我的视图代码也不知道是否发生了变化。如果是WPF,我可能会利用
NotifyOnSourceUpdated
,但在WP7中,我没有这种奢侈。。。还是我在这里遗漏了什么?
public class POCO
{
    public string Name { get; set; }
    public bool IsActive { get; set; }
}