所以目前我正在学习WPF和MVVM,我在理解 DataContext
和 DataBinding
时遇到了一些麻烦 . 我的问题是我不明白如何从后面的代码访问数据 .
这里详细说明我的问题就是一个例子:
假设我有一个应用程序,应该允许我将 Rectangles
放在 Canvas
上 . 该应用程序包含一个有3个子视图的窗口
-
Canvas
使用带有ContentPresenter
的ItemsControl
绘制Rectangles
-
A
View
显示参数(宽度,高度,X,Y) -
A
ListBox
向我展示了所有创建的矩形
我有一个 Rectangles
的ViewModel和一个_1123930_的MainViewModel,并保存当前选中的Rectangle .
三个 Views
从 MainWindow
继承 DataContext
, MainViewModel
为 DataContext
. XAML
中的绑定值完全没有问题 .
但是,用户应该能够在 CanvasView
上拖动和调整矩形大小 . 为此,我将 MouseEvents
添加到 CanvasView.cs
,它识别我点击了一个矩形和 Adorner
以向用户显示他可以进行交互 .
Adorner
在单独的类文件中编码并处理调整大小操作 . 问题是,Adorner只是编辑了 ContentPresenter
项目 .
如何告诉背后的 Adorner
或任何其他代码,他们应该编辑 MainViewModel
中 ObservableCollection<Rectangles>
中的矩形? MouseEvent
只能检索 UIElement
, Rectangle
为 DataContext
所以我无法告诉我的 MainViewModel
当前选择了某个矩形 .
是否应该在 MainViewModel
中发生所有操作(即MouseEvent指向编辑内容的MainViewModel中的静态方法)?每次更改后是否需要'reload' MainViewModel
或者访问数据和编辑数据的理想方式是什么?
我希望这能解释我的问题 . 如果您需要进一步解释我的问题,请在下面发表评论 .