在2个虚拟机之间共享属性

问题描述:

我正在使用Caliburn.Micro,并且在内容控制中使用了具有子虚拟机的MainWindowViewModel设置。在主VM中,我有一个子VM属性,它允许我在虚拟机之间共享属性。我在两个VM上都有一个UserName属性。在2个虚拟机之间共享属性

在主视图上,我在用户名的末尾添加了一个字符串,以便对其进行个性化设置,而在子View上,我只是按原样显示用户名。用户名属性只能在子虚拟机中编辑,而不能在主虚拟机中编辑。当我在孩子中编辑它时,它不会更新父代。我不知道如何绑定这些属性以使父虚拟机与虚拟机同步。

主要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); 
      } 
     } 

儿童VM:

private string _userName = "John"; 
     public string UserName 
     { 
      get { return _userName; } 
      set 
      { 
       _userName = value; 
       NotifyOfPropertyChange(() => UserName); 
      } 
     } 
+0

什么是你的孩子VM,DiaryViewModel?还是不同的东西?即你应该从相同的来源'画',并且所有的都要通过儿童虚拟机 - 你的问题应该得到解决。让我知道一些细节,我会举个例子。 – NSGaga 2012-04-28 17:44:46

你可以只绑定在对的MainView你DiaryViewModel.UserName控制和执行字符串格式化就在的.xaml。不要忘记用斜杠在字符串格式中跳过撇号。

<TextBlock Text="{Binding Source=DiaryViewModel.UserName, StringFormat='\{0}\'s Diary Log'}" /> 
+0

我在视图中有一个标签,而不是一个文本块,所以我想我必须切换它,所以我可以使用StringFormat。感谢你的回答。 – 2012-04-28 18:02:03