Windows phone 7 如何更改ViewModel属性的属性并使更改反映在绑定控件上?
我正在编写一个windows Phone应用程序;作为一个好公民,我正在使用MVVM模式:)由于我不是MVVM方面的专家,我面临着以下问题,我希望我能在这里找到解决方案 我有以下代码: XAMLWindows 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
<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; }
}