2016-05-05 5 views
1

Я реализую флажок «Выбрать все» в datagrid в wpf, используя шаблон «mvvm». Проблема, с которой я сталкиваюсь, заключается в проверке флажка «Выбрать все», все флажки проверяются, но только после прокрутки полосы прокрутки. Как исправить эту проблему?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

Пожалуйста, покажите код, который устанавливает флажок, а также XAML для DataGrid. – toadflakz

+1

изменяет ли ваше свойство reportListItemModel.IsSelected свойство? Наверное, это не так. – Muds

ответ

0

Это поведение, которое я наблюдал, когда модель, представленная в строках DataGrid (в данном случае UseCase), не реализует INotifyPropertyChanged. Они обновляются во время прокрутки, потому что они перерисовываются, а новые значения считываются из свойств в то время.

Смежные вопросы