2013-02-17 88 views
13

我在我的模型(X類)布爾屬性的綁定:IsSelected,鏈接到WPF DataGrid如下: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

它很好用。

但是,當我有很多行,我需要滾動來查看它們,並且我按下了「Select All」按鈕來運行以下功能,他只選擇了一些行而不是全部:(即使所有名單上的IsSelected是

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

我不明白爲什麼會這樣?

+0

你見過[這個問題](http://stackoverflow.com/q/2068130/620360)從相關章節? – LPL 2013-02-17 09:39:37

+0

@LPL它沒有幫助我,答案沒有成功。我說的是從viewModel到XMAL的返回數據,這個問題是相反的 – 2013-02-17 10:41:25

回答

12

這就是最後幫我:

我把在DataGrid:

VirtualizingStackPanel.VirtualizationMode="Standard" 
+1

如果你需要使用回收模式(我這樣做),另一個選項是一個附加的行爲/代碼隱藏,監視網格的OnSelectedCellsChanged事件,並通過更新(de)選定的虛擬機(如果需要雙向綁定,也需要做相反的處理)。 – dlf 2015-12-03 15:30:29