WPF/C#, ListView等类似容器内部元素的Command处理

ListView使用ItemsSource绑定到ObservableCollection之后,内部ListViewItem元素的Command绑定时(例如鼠标左键单击触发命令),如何找到合适的DataContext是个问题。一般以前使用FindAncestor等方式,找到ListView的DataContext对应的View Model,然后在View Model中处理该Command。

现在使用了一种新做法,为ItemsSource中的每一个项的类设定为partial 类,然后就可以在View Model对应的项目中扩展元素类,这样直接在内部完成一些简单的操作了。

暂且称这种方式为“在模型类中处理Command”。

不过这样的方式只适合于同一个项目代码内部,因为partial类是编译器为每一个模块单独开放的小权限,最后他们都会被合并在一个模块中,所以不能跨越模块写partial代码。

用静态this扩展Class的方式不适用于添加ICommand处理器。

最直接的方式可能就是继承。不过继承的局限性还是比较多的。尤其在某些C/S数据通信交互程序中,不能要求底层代码都是用最后继承的类型。

现在采用的是定义delegate回调。虽然中间可能会经历多一两层的回调,但可以实现我们需要的直接在模型类中处理Command的方式。最终仍然回到View Model类中进行最后的处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容