我知道......这个问题被问了很多......但总是有相同的答案“将你的逻辑放在视图模型中”。
但在这个例子中,我必须将逻辑放在视图中,因为每次其中一个的行数发生变化时,我都必须测量视图中每个数据网格的大小。问题是......在我的视图模型中,我无法访问数据网格,所以我无法测量任何东西。在我看来,我无法得到行数已更改的响应。
有人知道我如何在视图中知道在数据网格中添加或删除了一行?它是一个带有自定义模板的自定义数据网格。也许这会有所帮助?
你有一个ObservableCollection
绑定到的DataGrid
,对吧?你有一个ViewModel
(包含那个ObservableCollection
)DataContext
作为View
. 您可以订阅视图中的CollectionChanged
事件ObservableCollection
(您可以从视图访问您的 ViewModel,因为它是View.DataContext
)。
例如
(this.DataContext as ViewModel).YourCollection
.CollectionChanged += (s, e) => { /* logic */ };
它略微违反了 MVVM。如果这是一个绝对自定义的控件,那么您已经从ObservableCollection
(因为您需要更新 UI)接收到事件,因此您可以在那里处理它。
我能想到的另一种方法是使用某种Mediator
模式,例如Messenger
在 MVVMLight 中。