【问题标题】:Working with viewmodel, how to change property in other window?使用 viewmodel,如何更改其他窗口中的属性?
【发布时间】:2011-07-11 17:07:48
【问题描述】:

我遇到了一个问题,希望您能帮助我。我正在 WPF MVVM 中实施。我会尽量解释清楚。 所以我有一种看法。其中我有一个大的财产考试。在这个视图中,我必须能够更改属性考试的设置。这很好。但是,我想要一个按钮,然后会出现一个对话框。在那里我可以更改考试的一些特定(其他)设置或属性。我不想在一个窗口中完成这一切,所以我使用对话框。我在我的视图模型中这样做:

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

        }

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

 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不会知道这个属性被改变了? 希望你明白了.. 可以帮助我吗:)?

谢谢..

【问题讨论】:

    标签: wpf mvvm window viewmodel


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      IMO,您的对话窗口应该有它自己的视图模型,并且您可以按照here 的描述将消息从该视图模型发送到原始视图模型

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        • 2019-11-25
        • 2016-10-15
        • 2011-06-03
        • 2011-11-30
        • 2022-01-07
        • 1970-01-01
        相关资源
        最近更新 更多