DevExpress MVVM - 共享ViewModel& EventToCommand

时间:2018-03-26 13:17:08

标签: c# winforms mvvm devexpress

我使用DevExpress将MVVM添加到我的WinForms应用程序中。我有一个包含ViewModel的表单,它通过构造函数参数提供给所有用户控件。

DataBindings工作正常,但我想通过向usercontrols工具栏项(BarButtonItem)添加EventToCommand行为来向功能区添加功能。

我做这样的绑定:

MVVMContext context = new MVVMContext();
context.ViewModelType = typeof(MyViewModel);
context.WithEvent<MyViewModel, EventArgs>(cmdA, "ItemClick")
            .EventToCommand(x => x.SomeMethod());

context.WithEvent<MyViewModel, EventArgs>(cmdB, "ItemClick")
            .EventToCommand(x => x.SomeOtherMethod());

context.SetViewModel(typeof(MyViewModel), viewModel);

viewModel是MyViewModel的一个实例,它包含数据,并在表单的用户控件构造函数中接收。

但是,在运行应用程序时,两个按钮都可以工作,但似乎绑定到MyViewModel的单独实例。我如何使用我已有的实例?谢谢!

1 个答案:

答案 0 :(得分:3)

由于您已从外部绑定上下文传递ViewModel实例,因此应按如下方式设置MVVMContext:

BindCommand

这样可以防止自动创建MyViewModel实例(在指定context.ViewModelType时使用自动创建)。

然后您可以像往常一样使用MVVMContext API。

在您的情况下,您可以使用EventToCommand代替var fluent = context.OfType<MyViewModel>(); fluent.BindCommand(cmdA, x => x.SomeMethod()); fluent.BindCommand(cmdB, x => x.SomeOtherMethod()); ,因为它专门设计用于处理按钮对象(如BarButtonItems)。
而且,我强烈建议您使用Fluent API,它提供非常干净和可维护的代码:

sign in