【问题标题】:IsSelected Binding in WPF DataGridWPF DataGrid 中的 IsSelected 绑定
【发布时间】: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 的返回数据,而这个问题恰恰相反

标签: wpf mvvm binding datagrid


【解决方案1】:

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

我把DataGrid放进去:

VirtualizingStackPanel.VirtualizationMode="Standard"

【讨论】:

  • 如果您需要使用回收模式(我愿意),另一个选项是附加的行为/代码隐藏,它监视网格的 OnSelectedCellsChanged 事件并通过更新(取消)选定的虚拟机来做出反应(需要如果需要双向绑定,也可以执行相反的操作)。
猜你喜欢
  • 2011-04-06
  • 2020-08-05
  • 2015-07-02
  • 2012-06-12
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多