共享2个VM之间的属性

时间:2012-04-28 17:04:05

标签: c# mvvm caliburn.micro

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

在主视图上我在用户名的末尾添加一个字符串来个性化它,而在子视图上我只是按原样显示用户名。 username属性仅在子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);
            }
        }

子VM:

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

1 个答案:

答案 0 :(得分:0)

您可以将MainView中的控件绑定到DiaryViewModel.UserName,并在.xaml中执行字符串格式设置。不要忘记用斜杠在字符串格式中转义撇号。

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