当 ObservableCollection 值更新时,WPF Datagrid 绑定不更新

2024-02-10

我有一个 WPF DataGrid 绑定到一个名为“Personnel”的 ObservableCollection。我在 DataGrid 中有一个可编辑的 DataGridCheckBoxColumn。 CheckBoxColumn 绑定到我的集合中名为“AircraftCommanderSelected”的布尔值。当选择一行并选中复选框时,会触发一个事件来更新集合,以便每个“人员”的所有 AircraftCommanderSelected 值都设置为 false(刚刚设置为 true 的值除外)。话虽如此,我的集合正在正确更新,但我的数据网格不会“取消选中”之前选中的框,其绑定值已更改为 false。我如何通知该值已更改?下面是我的代码(为了便于阅读而进行了修改)。

Class

 public class Personnel
 {
      ///
      ///Other objects removed for reading purposes. All follow same format.
      ///
      private bool aircraftCommanderSelected;
      public bool AircrafCommanderSelected
      {
            get { return this.aircraftCommanderSelected; }
            set
            {
                if(this.aircraftCommanderSelected != value)
                {
                     this.aircraftCommanderSelected = value;
                     this.NotifyPropertyChanged("AircraftCommanderSelected");
                }
            }
      }

      public event PropertyChangedEventHandler PropertyChanged;
      public void NotifyPropertyChanged(strin propName)
      {
           if(this.PropertyChanged != null)
           {
               this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
           }
      }
 }

XAML

 <DataGrid Name="dataGrid" AutoGenerateColumns="False" SelectedItem="{Binding Personnel}" CanUserDeleteRows="False" CanUserAddRows="False" IsReadOnly="False" SelectionMode="Single" CellEditEnding="dataGrid_CellEditEnding">
     <DataGrid.Columns>
         <DataGridCheckBoxColumn local:DataGridUtil.Name="ac" Header="AC" Binding="{Binding AircraftCommanderSelected}"/>
     </DataGrid.Columns>
 </DataGrid>

代码隐藏

 private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
 {
         foreach (Personnel p in vm.personnel)//Loop through each item in the collection
         {
             //per.ID is the ID of the person who was just edited.
             //This sets everyones value to false except the person that was just edited.
             if (p.ID != per.ID) { p.AircraftCommanderSelected = false; }
         }
  }

当集合被修改并且属性更改事件被触发时,数据网格不应该更新吗?

我找到了一个解决方案,但它涉及多线程,这似乎是这个问题的不正确解决方案。我也不喜欢它刷新整个网格并取消选择我当前的选择

 dataGrid.Dispatcher.BeginInvoke(new Action(() => dataGrid.Items.Refresh()), System.Windows.Threading.DispatcherPriority.Background);

任何帮助表示赞赏。

Thanks

-Justin


您需要检查一系列事项:

  • 对象是否在您的ObservableCollection实施INotifyPropertyChanged适当地? (不在它发布的代码中)
  • 属性名称是否存在拼写错误或大小写变化?如果您使用的是 .NET 4.6,则可以使用新的nameof()财产来确保这一点。
  • 如果可以从代码隐藏更改该值,那么您必须使用Mode=TwoWay

默认情况下,大多数绑定是OneWay。如果您的绑定模式是一种方式,并且您更改后面代码中的值,则绑定将中断并且不再起作用,直到您重新加载 XAML。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 ObservableCollection 值更新时,WPF Datagrid 绑定不更新 的相关文章

随机推荐