【发布时间】:2011-02-19 03:15:16
【问题描述】:
我认为这应该很容易,但我似乎无法弄清楚。
从示例 ViewModel 中获取这些属性(ObservableViewModel 实现 INotifyPropertyChanged):
class NameViewModel : ObservableViewModel
{
Boolean mShowFullName = false;
string mFirstName = "Wonko";
string mLastName = "DeSane";
private readonly DelegateCommand mToggleName;
public NameViewModel()
{
mToggleName = new DelegateCommand(() => ShowFullName = !mShowFullName);
}
public ICommand ToggleNameCommand
{
get { return mToggleName; }
}
public Boolean ShowFullName
{
get { return mShowFullName; }
set { SetPropertyValue("ShowFullName", ref mShowFullName, value); }
}
public string Name
{
get { return (mShowFullName ? this.FullName : this.Initials); }
}
public string FullName
{
get { return mFirstName + " " + mLastName; }
}
public string Initials
{
get { return mFirstName.Substring(0, 1) + "." + mLastName.Substring(0, 1) + "."; }
}
}
使用此 ViewModel 的 [在此处插入形容词] 视图的内容可能如下所示:
<TextBlock x:Name="txtName"
Grid.Row="0"
Text="{Binding Name}" />
<Button x:Name="btnToggleName"
Command="{Binding ToggleNameCommand}"
Content="Toggle Name"
Grid.Row="1" />
我看到的问题是触发 ToggleNameCommand 时。该命令正确更新了 ShowFullName 属性,但视图中的 Name 绑定永远不会更新。
我错过了什么?如何强制绑定更新?我是否需要将 Name 属性实现为 DependencyProperties(因此从 DependencyObject 派生)?对我来说似乎有点重量级,我希望有一个更简单的解决方案。
谢谢, wTs
【问题讨论】:
标签: wpf mvvm properties readonly