所以目前我正在学习WPF和MVVM,我在理解DataContext
和DataBinding
时遇到了一些麻烦。我的问题是我不明白如何从后面的代码访问数据。
这里详细说明我的问题是一个例子:
假设我有一个应用程序允许我将Rectangles
放在Canvas
上。该应用程序包含一个窗口,其中包含3个子视图
Canvas
使用Rectangles
使用ItemsControl
ContentPresenter
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
只能检索Rectangle
为DataContext
的{{1}},因此我无法告诉MainViewModel
当前选择了某个矩形。
是否所有操作都发生在MainViewModel
中(即MouseEvent指向MainViewModel中编辑内容的静态方法)?每次更改后是否需要“重新加载”MainViewModel
或者访问数据并进行编辑的理想方式是什么?
我希望这种解释我的问题。如果您需要进一步解释我的问题,请在下面发表评论。