2016-05-05 257 views
1

我正在使用'mvvm'模式在wpf中的datagrid中實現全選複選框。我面對的問題是檢查標題「選擇全部」複選框,所有複選框都會被檢查,但只能在滾動滾動條之後進行檢查。如何解決這個問題?Datagrid沒有正確更新,滾動時更新

向下滾動檢查後滾動備份

[

private bool _IsSelected; 
    public bool IsSelected 
    { 
     get { return _IsSelected; } 
     set 
     { 
      _IsSelected = value; 
      OnPropertyChanged("IsSelected"); 
     } 
    } 

    private bool _AllSelected; 
    public bool AllSelected 
    { 
     get { return _AllSelected; } 
     set 
     { 
      _AllSelected = value; 
      foreach (var reportListItemModel in UsecaseListItems) 
      { 
       reportListItemModel.IsSelected = this._AllSelected; 
       OnPropertyChanged("IsSelected"); 
      } 
      OnPropertyChanged("AllSelected"); 

     } 
    } 


    private ObservableCollection<UseCase> _usecaseListItems = new ObservableCollection<UseCase>(); 
    public ObservableCollection<UseCase> UsecaseListItems 
    { 
     get { return _usecaseListItems; } 
     set { 
      _usecaseListItems = value; 
      OnPropertyChanged("UsecaseListItems"); 
     } 
    } 

XAML代碼後,選擇 '選擇全部'

[

並再次

<DataGrid Grid.Row="0" ItemsSource="{Binding Path=UsecaseListItems, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" Name="MyDataGrid" 
      CanUserAddRows="False" > 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Binding="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,IsAsync=True}" Width="50"> 
       <DataGridCheckBoxColumn.HeaderTemplate> 
        <DataTemplate x:Name="dtAllChkBx"> 
         <CheckBox Name="cbxAll" Content="All" IsChecked="{Binding Path=DataContext.AllSelected,RelativeSource={RelativeSource AncestorType=UserControl },Mode=TwoWay}"/> 
        </DataTemplate> 
       </DataGridCheckBoxColumn.HeaderTemplate> 
      </DataGridCheckBoxColumn> 
      <DataGridTemplateColumn Header="Name" Width="SizeToCells" IsReadOnly="True"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding UsecaseName}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

請顯示設置複選框的代碼以及DataGrid的XAML。 – toadflakz

+1

您的reportListItemModel.IsSelected屬性是否通知屬性已更改?我猜這不是。 – Muds

回答

0

這是我觀察到在DataGrid行(在此例中爲UseCase)代表的模型未執行INotifyPropertyChanged時的行爲。它們在滾動過程中進行更新,因爲它們被重繪,並且當時從屬性中讀取新的值。