我的这个项目必须使用免费的 WPF DataGrid(我认为 Infragistics 库很糟糕,我在此之后将其收回)。
看起来 DataGrid 没有干净的 MVVM 友好方式来获取 selectedRows 列表?
我可以绑定数据,SelectedItem="{Binding SelectedSourceFile}"
但这仅显示第一个选定的行。需要能够获取所有选定的行。
有什么提示可以通过 MVVM 干净地做到这一点吗?
您可以使用我为此类情况创建的解决方法,它允许您OneWayToSource
为只读依赖项属性执行绑定。我称之为PushBinding
。
我在这里发表了一篇关于它的博客文章:OneWayToSource Binding for ReadOnly Dependency Property
要绑定SelectedItems
,你可以这样做
<DataGrid ItemsSource="{Binding ...}">
<pb:PushBindingManager.PushBindings>
<pb:PushBinding TargetProperty="SelectedItems" Path="MySelectedItems"/>
</pb:PushBindingManager.PushBindings>
</DataGrid>
以及 ViewModel 中的属性
public IList MySelectedItems
{
get;
set;
}
如果您有兴趣,可以使用PushBinding
此处下载演示项目:PushBindingInStyleDemo.zip
这里有一篇博客文章描述了如何对 SelectedItems 属性进行双向绑定。该示例使用一个 ListBox,但应该与 DataGrid 一样工作,因为它们都派生自 MultiSelector。
博客文章有可下载的示例代码。