首页 > 解决方案 > WPF Datgrid 未更新

问题描述

我在 UI 中更新 WPF Datagrid 时遇到问题。我正在尝试使用 MVVM。我正在使用一个可观察的集合:

 public ObservableCollection<OCInspections> MyInspectionList
        {
            get { return _MyInspectionList; }
            set { _MyInspectionList = value; OnPropertyChanged("MyInspectionList"); }
        }

附加到 IcollectionView:

MyInspectionView = CollectionViewSource.GetDefaultView(MyInspectionList); 

与财产...

public ICollectionView MyInspectionView 
        {
            get { return _MyInspectionView; }
            set { _MyInspectionView = value; OnPropertyChanged("MyInspectionView"); }
        }

附加到数据网格项目源:

 <DataGrid x:Name="InspectionGrid" Style="{StaticResource DataGridStyle}" SelectionUnit="FullRow" ItemsSource="{Binding MyInspectionView, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, diag:PresentationTraceSources.TraceLevel=High}" SelectedValue="{Binding  Path=MySelectedInspection,Mode=TwoWay}"   >

当我过滤网格时,UI 会更新:

public string ToggleText
        {
            get {
                return _ToggleText ?? (_ToggleText = "Open Orders"); }
            set {
                _ToggleText = value;
                OnPropertyChanged("ToggleText");
                FilterMe();        
            }
        }

    private void FilterMe()
            {
                MyInspectionView.Filter = O =>
               {
                   OCInspections P = O as OCInspections;
                   if (ToggleState == true)
                   {
                       return P.CompleteDate == null;
                   }
                   else
                   {
                       return P.CompleteDate != null;
                   }                 
               };    
            }

但是,有两个奇怪的地方可能是相关的:

  1. 如果我尝试对网格进行排序,则 UI 不会更新。

    私人无效 Click_DefaultSort() { MyInspectionView.SortDescriptions.Add(new SortDescription("StopReasonID", ListSortDirection.Ascending)); MyInspectionView.SortDescriptions.Add(new SortDescription("StartedDate", ListSortDirection.Ascending)); MyInspectionView.SortDescriptions.Add(new SortDescription("ReceiptDate", ListSortDirection.Ascending));

                }
    
  2. 如果用户在新行中输入数据并将其添加到 observable 集合中,它将添加并显示在 UI 中,但不会自动添加下一个新的空白行。但是,如果我单击另一行或按 Enter 键,它将添加新的空白行:

    • 在单击添加行按钮之前 在此处输入图像描述

点击添加按钮后 在此处输入图像描述

单击任何现有行或按 Enter 后: 在此处输入图像描述

我认为这两个项目可能是相关的,这就是为什么我将它们包括在同一个问题中。这是我在第二个问题中找到的最接近的例子: 更新 ObservableCollection 后没有使用 Datagrid Editing 的新行

编辑:另一个观察结果是绑定引发了这些警告,但我未能成功解决:

System.Windows.Data Warning: 56 : Created BindingExpression (hash=5405340) for Binding (hash=39717249)
System.Windows.Data Warning: 58 :   Path: 'MyInspectionView'
System.Windows.Data Warning: 62 : BindingExpression (hash=5405340): Attach to System.Windows.Controls.DataGrid.ItemsSource (hash=42463340)
System.Windows.Data Warning: 67 : BindingExpression (hash=5405340): Resolving source 
System.Windows.Data Warning: 70 : BindingExpression (hash=5405340): Found data context element: DataGrid (hash=42463340) (OK)
System.Windows.Data Warning: 78 : BindingExpression (hash=5405340): Activate with root item MainWindowViewModel (hash=63685038)
System.Windows.Data Warning: 108 : BindingExpression (hash=5405340):   At level 0 - for MainWindowViewModel.MyInspectionView found accessor RuntimePropertyInfo(MyInspectionView)
System.Windows.Data Warning: 104 : BindingExpression (hash=5405340): Replace item at level 0 with MainWindowViewModel (hash=63685038), using accessor RuntimePropertyInfo(MyInspectionView)
System.Windows.Data Warning: 101 : BindingExpression (hash=5405340): GetValue at level 0 from MainWindowViewModel (hash=63685038) using RuntimePropertyInfo(MyInspectionView): ListCollectionView (hash=48179284)
System.Windows.Data Warning: 80 : BindingExpression (hash=5405340): TransferValue - got raw value ListCollectionView (hash=48179284)
System.Windows.Data Warning: 84 : BindingExpression (hash=5405340): TransferValue - implicit converter produced ListCollectionView (hash=48179284)
System.Windows.Data Warning: 89 : BindingExpression (hash=5405340): TransferValue - using final value ListCollectionView (hash=48179284)

标签: wpfxamldatagridobservablecollection

解决方案


推荐阅读