我正在写一个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。
由于
答案 0 :(得分:0)
我认为您必须在ViewModel中实现调用POCO属性的属性,除非您在POCO中实现INotifyPropertyChanged,然后针对MVVM,模型应该只保存数据,而ViewModel是链接模型的粘合剂与视图。
在ViewModel中创建属性可能看起来有很多额外的工作,但它确实增加了能够基于单个模型定义许多ViewModel的好处。因此,在特定的ViewModel中,您只公开所需的属性,而不是模型可以为您提供的所有内容。
一旦定义了ViewModel属性,您可能需要将Binding的模式设置为TwoWay,以便在基础ViewModel属性发生更改时更新UI。