WPF DataGrid中的IsSelected绑定

18

我的模型(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

IsSelected- 调用NotifyPropertyChange

很好用。

但是当我有很多需要滚动才能看到的行,而我按下“全选”按钮运行以下函数时,它只选择了一些行而不是全部:(即使列表中所有的IsSelected都是true)

public void SelectAll()
{
    ListX.All(c => c.IsSelected = true);
}

我不明白为什么会发生这种情况?


你在相关部分看到了这个问题吗? - LPL
@LPL 它没有帮助我,那里的答案不成功。我在谈论从 viewModel 返回数据到 XMAL,而那个问题则相反。 - Hodaya Shalom
1个回答

16
那正是帮助我最终解决问题的方法: 我将数据表格放入了以下位置:
VirtualizingStackPanel.VirtualizationMode="Standard"

1
如果您需要使用回收模式(我需要),另一个选项是附加的行为/代码后端,它监视网格的OnSelectedCellsChanged事件,并通过更新所指示的(取消)选择的VM来做出反应(如果需要双向绑定,则还需要执行相反操作)。 - dlf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接