Code背后的DataBinding / DataContext(WPF - MVVM)

时间:2017-07-11 17:34:14

标签: c# wpf xaml mvvm

所以目前我正在学习WPF和MVVM,我在理解DataContextDataBinding时遇到了一些麻烦。我的问题是我不明白如何从后面的代码访问数据。

这里详细说明我的问题是一个例子:

假设我有一个应用程序允许我将Rectangles放在Canvas上。该应用程序包含一个窗口,其中包含3个子视图

  • Canvas使用Rectangles使用ItemsControl
  • 绘制ContentPresenter
  • 显示参数(宽度,高度,X,Y)的View
  • ListBox向我显示所有已创建的矩形

我有Rectangles的ViewModel和一个ObservableCollection<RectangleViewModel>的MainViewModel,并保存当前选中的矩形。

三个Views继承了DataContext MainWindow MainViewModel DataContext的{​​{1}}。 XAML中的绑定值完全没有问题。

但是,用户应该可以在CanvasView上拖动和调整矩形的大小。为此我向MouseEvents添加了CanvasView.cs,其中Adorner认识到我点击了一个矩形,Adorner向用户显示了他可以互动。

ContentPresenter在单独的类文件中编码并处理调整大小操作。问题是,Adorner只是编辑Adorner项目。

如何告诉ObservableCollection<Rectangles>或其他任何代码,他们应该编辑MainViewModel MouseEvent中的矩形? UIElement只能检索RectangleDataContext的{​​{1}},因此我无法告诉MainViewModel当前选择了某个矩形。

是否所有操作都发生在MainViewModel中(即MouseEvent指向MainViewModel中编辑内容的静态方法)?每次更改后是否需要“重新加载”MainViewModel或者访问数据并进行编辑的理想方式是什么?

我希望这种解释我的问题。如果您需要进一步解释我的问题,请在下面发表评论。

0 个答案:

没有答案