WPF DataGrid 中的 IsSelected 绑定

Posted

技术标签:

【中文标题】WPF DataGrid 中的 IsSelected 绑定【英文标题】:IsSelected Binding in WPF DataGrid 【发布时间】:2013-02-01 20:07:58 【问题描述】:

我的模型(X 类)布尔属性:IsSelected,链接到 WPF DataGrid,如下所示:

<DataGrid  SelectedIndex="Binding SelectedXIndex,Mode=TwoWay" 
           DataContext="Binding MyViewModel" 
           ItemsSource="Binding ListX" AutoGenerateColumns="False">
     <DataGrid.RowStyle>
         <Style TargetType="x:Type DataGridRow">
             <Setter Property="IsSelected" 
                     Value="Binding IsSelected, Mode=TwoWay, 
                             UpdateSourceTrigger=PropertyChanged"/>
         </Style>
     </DataGrid.RowStyle>
</DataGrid>

ListX- ObservableCollection

IsSelecte- 调用 NotifyPropertyChange

效果很好。

但是当我有很多行时,我需要滚动查看它们,然后按下运行以下功能的“全选”按钮,他只选择了一些行而不是全部:(即使尽管列表中的所有 IsSelected 都是 true)

public void SelectAll()

    ListX.All(c => c.IsSelected = true);

我不明白为什么会这样?

【问题讨论】:

您是否在“相关”部分看到this question? @LPL 它没有帮助我,那里的答案不成功。我说的是从 viewModel 到 XMAL 的返回数据,而这个问题恰恰相反 【参考方案1】:

这就是最终帮助我的原因:

我把DataGrid放进去:

VirtualizingStackPanel.VirtualizationMode="Standard"

【讨论】:

如果您需要使用回收模式(我愿意),另一个选项是附加的行为/代码隐藏,它监视网格的 OnSelectedCellsChanged 事件并通过更新(取消)选定的虚拟机来做出反应(需要如果需要双向绑定,也可以执行相反的操作)。

以上是关于WPF DataGrid 中的 IsSelected 绑定的主要内容,如果未能解决你的问题,请参考以下文章

WPF DataGrid MultiBinding到DataGrid ItemSsource中的类

WPF 中DataGrid的应用

如何隐藏 WPF DataGrid 中的列标题?

DataGrid中的WPF绑定到DataContext

如何使用 MVVM 自动隐藏 WPF 中的 DataGrid 列? [复制]

删除 WPF DataGrid 中的空白列