0

我知道......这个问题被问了很多......但总是有相同的答案“将你的逻辑放在视图模型中”。

但在这个例子中,我必须将逻辑放在视图中,因为每次其中一个的行数发生变化时,我都必须测量视图中每个数据网格的大小。问题是......在我的视图模型中,我无法访问数据网格,所以我无法测量任何东西。在我看来,我无法得到行数已更改的响应。

有人知道我如何在视图中知道在数据网格中添加或删除了一行?它是一个带有自定义模板的自定义数据网格。也许这会有所帮助?

4

1 回答 1

0

你有一个ObservableCollection绑定到的DataGrid,对吧?你有一个ViewModel(包含那个ObservableCollectionDataContext作为View. 您可以订阅视图中的CollectionChanged事件ObservableCollection(您可以从视图访问您的 ViewModel,因为它是View.DataContext)。

例如

(this.DataContext as ViewModel).YourCollection
    .CollectionChanged += (s, e) => { /* logic */ };

它略微违反了 MVVM。如果这是一个绝对自定义的控件,那么您已经从ObservableCollection(因为您需要更新 UI)接收到事件,因此您可以在那里处理它。

我能想到的另一种方法是使用某种Mediator模式,例如Messenger在 MVVMLight 中。

于 2013-01-09T11:07:41.157 回答