【发布时间】:2011-02-15 16:21:50
【问题描述】:
在运行时遵循 MVVM 模式在 Silverlight DataGrid 控件中动态指定 DataGrid 列的最佳方法是什么?
我想做的是将“DataGrid.Columns”属性绑定到我的 ViewModel 中的一个属性,这样,如果用户添加/删除列,我只需更新 ViewModel 属性,DataGrid 就会发生变化。问题是,“DataGrid.Columns”属性不能绑定(我不认为)。
由于此属性不可用,DataGrid 控件本身在 ViewModel 级别不可用,我目前的方法是跳出 MVVM 模式以实现此特定实现,并使用 MVVM Light 的 Messenger 在 View 的代码隐藏中捕获某些事件类,然后直接与 DataGrid 控件对话以实现此功能。我知道这是对这种方法的一般性陈述,没有细节,但有没有更简单的方法......或者可能不是那么容易,但是更好地遵循 MVVM 模式的更好方法?
DataGrid 控件的 Columns 属性无法绑定,这让我快疯了……看起来很简单。
仅供参考 - 在建议使用 AutoGenerateColumns = True 之前,为绑定到 DataGrid.ItemsSource 的集合中的每个项目绑定的类没有单独的属性来识别绑定到列的内容......它是一个集合属性包含列以保持它们完全动态,以便特定路径消失。此外,出于同样的原因,处理 AutoGeneratingColumns 并使用 e.Cancel 显示/隐藏列也是不确定的(我认为)。
【问题讨论】:
-
因此,在发布此内容后,我的脑海中突然出现了这个想法。如果我的模型类像 DataTable 一样,其中的列是动态的并且可以添加/删除,那不是很好吗随意,并且当 AutoGenerateColumns = true 时,DataGrid 控件可以识别此属性 (DataTable.Columns),因此可以实现动态列。但问题是,我如何以一种可以由 Silverlight DataGrid 控件解释的方式编写我的 Model 类(除了从 DataTable 类继承的明显方式,我不想这样做......我不认为)?
-
此评论无效。与 WPF 不同,Silverlight 似乎没有此功能。
标签: silverlight xaml datagrid mvvm mvvm-light