在 2 个 VM 之间共享属性
本文关键字:共享 属性 之间 VM | 更新日期: 2023-09-27 18:32:38
我正在使用Caliburn.Micro,并且我在内容控件中设置了MainWindowViewModel和子VM。在主 VM 中,我有一个子 VM 属性,它允许我在 VM 之间共享属性。我在两个 VM 上都有一个用户名属性。
在主视图上,我在用户名的末尾添加一个字符串以对其进行个性化设置,而在子视图上,我只是按原样显示用户名。用户名属性只能在子虚拟机中编辑,在主虚拟机中不可编辑。当我在子项中编辑它时,它不会更新父项。我不确定如何绑定这些属性以使父 VM 与子 VM 同步。
主虚拟机:
public string UserName
{
get { return string.Format("{0}'s Diary Log", DiaryViewModel.UserName); }
}
private DiaryViewModel _diaryViewModel;
public DiaryViewModel DiaryViewModel
{
get { return _diaryViewModel; }
set
{
_diaryViewModel = value;
NotifyOfPropertyChange(() => DiaryViewModel);
}
}
子虚拟机:
private string _userName = "John";
public string UserName
{
get { return _userName; }
set
{
_userName = value;
NotifyOfPropertyChange(() => UserName);
}
}
您只需将
MainView 中的控件绑定到 DiaryViewModel.UserName,然后直接在 .xaml 中进行字符串格式设置。不要忘记用斜杠转义字符串格式中的撇号。
<TextBlock Text="{Binding Source=DiaryViewModel.UserName, StringFormat=''{0}''s Diary Log'}" />