2016-05-05 23 views
1

私は、 'mvvm'パターンを使用してwpfのDataGridでselect allチェックボックスを実装しています。私が直面している問題は、ヘッダー "Select All"チェックボックスをチェックすることです。すべてのチェックボックスがチェックされますが、スクロールバーをスクロールした後でなければなりません。この問題を解決するには?バックアップ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を実装していない場合に観察された動作です。スクロール中に更新されるため、スクロール中に更新され、その時点で新しい値がプロパティから読み込まれます。

関連する問題