【问题标题】:Datagrid not updating properly, updates while scrollingDatagrid 未正确更新,滚动时更新
【发布时间】:2016-05-05 08:27:04
【问题描述】:

我正在使用“mvvm”模式在 wpf 的数据网格中实现全选复选框。我面临的问题是检查标题“全选”复选框,所有复选框都被选中,但只有在向下滚动滚动条后才会被选中。如何解决这个问题?

选中“全选”后向下滚动

[

向上滚动后再次

[

 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>

【问题讨论】:

  • 请显示设置复选框的代码,以及 DataGrid 的 XAML。
  • 您的 reportListItemModel.IsSelected 属性是否通知属性已更改?我猜它没有。

标签: c# wpf mvvm datagrid


【解决方案1】:

这是我在DataGrid 行中表示的模型(在本例中为UseCase)未实现INotifyPropertyChanged 时观察到的行为。它们在滚动期间更新,因为它们被重绘并且新值是从当时的属性中读取的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2021-10-26
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多