我在很多地方都读过这篇文章。大多数人都指的是这两个链接:
我不明白他们中的任何一个。对于MVVM,我是初学者。有些人在MVVM中提到窗口操作时会提到控制器。这些是什么以及如何实施?通过 book ,MVVM由模型,视图模型和视图组成 - 控制器在哪里进来?
如果有人可以提供以下用例的样本,那就太棒了(对于那些刚刚开始使用这个用户的人来说,就像我一样):
答案 0 :(得分:0)
ViewModel到ViewModel的通信通常由Event Aggregator模式的实现来处理。
MVVM Light使用Messenger
类,Prism有另一种实现,但基本上这是在View模型之间发送消息而不耦合的一种方法。
有一些示例,Articles描述了用法。 我建议看看它。
关于WPF中的控制器内容,我不知道。
关于示例:
-I有一个带有WindowsViewModel的Windows。这个类应该有一个绑定到Button的命令。
- 用户点击按钮。执行命令。
-The Command打开一个新窗口。
在这里你应该创建对话视图模型,不知何故你应该创建窗口。或者使用ViewModel创建Window,但ViewModel应该不了解View,否则无法测试。
我们使用这样的东西,因为我们有一些要求,但它 可能会简单得多,碰巧它是我手头的唯一例子:
bool? ShowDialogImpl<TViewModel>(Action<TViewModel> setup) where TViewModel : ViewModel
{
return (bool?)DispatcherHelper.UIDispatcher.Invoke(
(Func<bool?>)(() =>
{
var viewModel = viewModelFactory.Get<TViewModel>();
viewModel.ViewService = this;
setup(viewModel);
var window = new Window
{
Owner = this,
SizeToContent = SizeToContent.WidthAndHeight,
WindowStartupLocation = WindowStartupLocation.CenterOwner,
Content = ViewFactory.CreateView<TViewModel>(),
DataContext = viewModel,
WindowStyle = WindowStyle.ToolWindow,
ShowInTaskbar = false
};
window.SetBinding(TitleProperty, new Binding("Title"));
openDialogs.Push(window);
window.Activated += (sender, args) => window.SizeToContent = SizeToContent.Manual;
var result = window.ShowDialog();
openDialogs.Pop();
viewModelFactory.Release(viewModel);
return result;
}));
}
基本上:我们创建一个窗口并使用视图模型。 视图模型是使用容器从工厂创建的。 设置Action委托是我们数据的入口点。
第一个Windows是Grid,第二个是编辑网格数据的Dialog。 在我们的Windows中:
messenger.Register<EntityUpdated<FooClass>>(this, message => UpdateItem(message.Entity));
在对话框中:
messenger.Send(new EntityUpdated<FooClass>(subject));
这样,我们知道在编辑对话框中更新某些内容以刷新网格。
希望这可以帮助你:)
答案 1 :(得分:0)
如果您不打算允许用户在窗口之间来回切换,而两者都打开(即,第一个打开第二个,第二个必须关闭以返回到第一个),你可以只需将两个窗口的viewmodel设置为同一个viewmodel实例,然后将第二个窗口打开为模态,并且来回传递的字符串将只是视图模型的属性,数据绑定到视图中的某些内容。 / p>