2016-05-05 82 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时的行为。它们在滚动过程中进行更新,因为它们被重绘,并且当时从属性中读取新的值。