使用viewmodel,如何在其他窗口中更改属性?

时间:2011-07-11 17:07:49

标签: wpf mvvm window viewmodel

我正坐在一个问题上,希望你能帮助我。我正在WPF MVVM中实现。我将尽我所能解释。 所以我有一个观点。其中我有一个大的财产考试。在此视图中,我必须能够更改属性检查的设置。这很好。但是,我想要一个按钮,然后会出现一个对话框。在那里,我可以更改一些特定的(其他)设置或考试属性。我不希望在一个窗口中完成所有操作,因此我使用对话框。我在我的viewmodel中执行此操作:

private void AlgemeneGegevensClick(object sender, RoutedEventArgs e)
        {
            ToetsBeheerViewModel vm = (ToetsBeheerViewModel)this.DataContext;
            EditAlgemeneGegevens window = new EditAlgemeneGegevens(vm);
            window.Show();

        }

所以一个窗口消失了一些文本框,我可以填写一些测试规范。但现在我的问题是,如何将(检查对象的)更改返回到viewmodel?因为我在我的分开窗口中这样做了:

 public partial class EditAlgemeneGegevens : Window
    {
        private ToetsBeheerViewModel toetsb;
        public EditAlgemeneGegevens(ToetsBeheerViewModel vm)
        {
            InitializeComponent();
            toetsb = vm;

        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            toetsb.Examination.Course = "blablabla";
        }


    }

所以我想在blablabla中更改考试的课程属性。但是我的viewmodel不会知道这个属性被改变了吗? 希望你能得到它..并且可以帮助我:))?

谢谢..

2 个答案:

答案 0 :(得分:1)

看起来你正在将ViewModel传递到新窗口......所以新窗口的任何更改都不应该反映在该实例上吗?

如果您需要一种更松散耦合的返回结果的方式,您可以考虑为您的应用程序使用消息总线基础结构。有几个实现,但这是一篇很好的文章:

http://blog.tonysneed.com/2011/03/03/climb-onboard-on-the-mvvm-message-bus/

答案 1 :(得分:0)

IMO,你的对话窗口应该有它自己的viewmodel,你可以按照here

描述从该视图模型发送一条消息到原始的viewmodel。