我使用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的单独实例。我如何使用我已有的实例?谢谢!
答案 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