我已经在很多地方读到过它.大多数人都指的是这两个链接:
我不明白他们中的任何一个.对于MVVM,我是初学者.有些人在MVVM中提到窗口操作时会提到控制器.这些是什么以及如何实施?通过本书,MVVM由模型,视图模型和视图组成 - 控制器在哪里进入?
如果有人可以提供以下用例的样本,那就太棒了(对于那些刚开始使用这个用户的人来说,就像我一样):
ViewModel 到 ViewModel 的通信通常由事件聚合器模式的实现来处理。
MVVM Light 使用该类Messenger,Prism 有另一种实现,但基本上这是在视图模型之间发送消息而无需耦合的一种方法。
有一些示例和描述用法的文章。我建议看一下。
关于WPF中的控制器的东西,我不知道。
关于这个例子:
-我有一个带有 WindowsViewModel 的 Windows。此类应该有一个绑定到按钮的命令。
- 用户单击按钮。执行命令。
- 该命令打开一个新窗口。
在这里,您应该创建对话框视图模型,并以某种方式创建窗口。或者使用 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;
}));
}
Run Code Online (Sandbox Code Playgroud)
基本上:我们创建一个窗口和一个视图模型。视图模型是使用容器从工厂创建的。设置操作委托是我们数据的入口点。
第一个窗口是一个网格,第二个对话框用于编辑网格的数据。如果我们有 Windows:
messenger.Register<EntityUpdated<FooClass>>(this, message => UpdateItem(message.Entity));
Run Code Online (Sandbox Code Playgroud)
在对话框中:
messenger.Send(new EntityUpdated<FooClass>(subject));
Run Code Online (Sandbox Code Playgroud)
这样,我们就知道编辑对话框中的某些内容何时更新以刷新网格。
希望这对您有帮助:)
| 归档时间: |
|
| 查看次数: |
5677 次 |
| 最近记录: |