0

我正处于开发 WPF 应用程序(使用 MVVM 模式)的早期阶段,该应用程序将允许用户为流程创建流程图。

初步看法如下:在此处输入图像描述

左侧窗格中的符号是 WPF Path 对象。

需要发生的是用户必须能够将符号从符号面板拖到图表部分。

现在,在带有代码隐藏事件的直接 WPF 中,这一切都非常简单,但我需要有关如何使用 MVVM 模式实现这一点的建议。我假设在我的模型中,我将有一个 Observable 集合,其中包含拖到画布上的所有符号(?)。每次将符号拖到画布上时,我将如何更新该集合?

我理解理想情况下,使用 MVVM 时视图的代码隐藏必须完全为空,但如果我将代码放在那里专门处理视图上的事件,它会破坏模式吗?

任何帮助,将不胜感激。

4

2 回答 2

1

在画布的 ViewModel 中,定义一个属性

public ObservableCollection<SymbolViewModel> Symbols { get; }

并在您的视图中使用 anItemsControl来显示符号:

<ItemsControl ItemsSource="{Binding Symbols}" ... />

当然,您需要在ItemsControl.

ObservableCollection 实现了 INotifyCollectionChanged,它确保 ItemsControl 自动更新。

于 2012-06-07T07:00:42.770 回答
1

如果您询问任何事件如何适合 MVVM,那么您必须记住 MVVM 是关于抽象ViewViewModelModelView不知道它ViewModel是什么以及底层Model是什么。

所以坚持这个想法,有2个观点。

1. If a view based event is handled in the code behind of the view (such as in `MyView.xaml.cs`) then as long as it does not refer the model or the viewmodel, it is perfectly fine in MVVM. Because such event handler is strictly a `View` specific code and should remain confined in the View layer (XAML or XAML.CS).

2. If an event handler has to refer the model or the viewmodel then it should not be handled in the code behind of the view but should be converted into `Command` based behavior using Attached Properties.

对于您的拖放场景,我更喜欢第 2 种方式。Google 获取附加属性和 MVVM wrt 事件,您会找到很好的示例。

于 2012-06-07T08:37:51.963 回答