C# DataGrid行添加事件
我知道。。。这个问题被问了很多。。。但总是用同样的答案“把你的逻辑放在视图模型中” 但在本例中,我必须将逻辑放在视图中,因为每当其中一个数据网格的行数发生变化时,我必须测量视图中每个数据网格的大小。问题是。。。在我的viewmodel中,我没有访问datagrid的权限,因此我无法测量任何东西。在我看来,我无法得到行数已经改变的响应 有人知道我是如何在视图中知道在datagrid中添加或删除了一行的?C# DataGrid行添加事件,c#,wpf,mvvm,view,datagrid,C#,Wpf,Mvvm,View,Datagrid,我知道。。。这个问题被问了很多。。。但总是用同样的答案“把你的逻辑放在视图模型中” 但在本例中,我必须将逻辑放在视图中,因为每当其中一个数据网格的行数发生变化时,我必须测量视图中每个数据网格的大小。问题是。。。在我的viewmodel中,我没有访问datagrid的权限,因此我无法测量任何东西。在我看来,我无法得到行数已经改变的响应 有人知道我是如何在视图中知道在datagrid中添加或删除了一行的? 这是一个带有自定义模板的自定义数据网格。也许这会有所帮助?您有一个绑定到数据网格的可观察集合,
这是一个带有自定义模板的自定义数据网格。也许这会有所帮助?您有一个绑定到
数据网格的可观察集合
,对吗?您有一个ViewModel
(其中包含observedcollection
)作为视图的DataContext
。您可以在视图中订阅ObservableCollection
的CollectionChanged
事件(您可以从视图访问ViewModel,因为它是视图。DataContext
)
例如
它稍微违反了MVVM。如果这是一个完全自定义的控件,那么您已经从ObservableCollection
接收到事件(因为您需要更新UI),因此您可以在那里处理它
我能想到的另一种方法是使用某种中介模式,例如MVVMLight中的Messenger。。。但我想这不是真的MVVM吗?因为视图依赖于此viewmodel的ecplicit。没办法避免吗?我是说。。。datagrid本身必须知道是否有一行添加到它。。。还是我错了?看我的编辑。顺便说一句,在MVVM中,视图了解ViewModel,因为它已经依赖于它的属性,所以不能在任何ViewModel中进行交换。根据给定的信息,我想到了这些选项,但您可能还有几个,但我看不到代码。
(this.DataContext as ViewModel).YourCollection
.CollectionChanged += (s, e) => { /* logic */ };