c# - 分组 ListView 中的项目不更改组

标签 c# wpf xaml listview collectionviewsource

我有一个 ListView ,其中我显示了按维护状态分组的车辆集合。如果 Vehicle 的 MaintenanceState 更新,我希望它会更改组。集合本身已正确更新,但 View 不会相应更新。下面是我的一些代码,也许有人可以帮助我让它工作。

这是我的 CollectionViewSource 管理我的分组

<CollectionViewSource x:Key="GroupedVehicles" IsLiveGroupingRequested="True" Source="{Binding ItemCollection}">
   <CollectionViewSource.GroupDescriptions>
      <PropertyGroupDescription PropertyName="MaintenanceState" />
   </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

这是我的 ListView

    <ListView ItemContainerStyle="{DynamicResource VehicleItemContainerStyle}"
              ItemsSource="{Binding Source={StaticResource GroupedVehicles}}"
              SelectedItem="{Binding SelectedItem}"
              SelectionMode="Single"
              Style="{DynamicResource VehiclesListViewStyle}">
       <ListView.GroupStyle>
          <GroupStyle>
             <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                   <Setter Property="Template">
                      <Setter.Value>
                         <ControlTemplate TargetType="{x:Type GroupItem}">
                            <StackPanel>
                               <Expander Header="{Binding Path=Name}"
                                         IsExpanded="True"
                                         Style="{DynamicResource VehicleListSectionExpanderStyle}">
                                  <ItemsPresenter />
                               </Expander>
                            </StackPanel>
                         </ControlTemplate>
                       </Setter.Value>
                    </Setter>
                 </Style>
              </GroupStyle.ContainerStyle>
           </GroupStyle>
        </ListView.GroupStyle>
        <ListView.ItemTemplate>
           <DataTemplate>
              <TextBlock Text="{Binding Number}" />
           </DataTemplate>
        </ListView.ItemTemplate>
</ListView>

这就是我在 ViewModel 上所做的

Vehicle updatedVehicle = new Vehicle(vehicleNumber, MaintenanceStateEnum.Running);
ItemCollection[index] = updatedVehicle;

ItemCollection 的类型是 ObservableCollection<Vehicle>我确保只添加、删除或替换车辆。 MaintenanceStateEnum 具有以下值:InMaintenance、MarkedForMaintenance 和 Running。

这是我的车辆的样子

public class Vehicle
{
    public Vehicle(int number, MaintenanceStateEnum state) {}
    public int Number { get; private set; }
    public MaintenanceStateEnum MaintenanceState { get; private set; }
}

所以我的问题:

如果我有 Vehicle(3, MaintenanceStateEnum.MarkedForMaintenance) 并且更新为 Vehicle(3, MaintenanceStateEnum.InMaintenance) 它不会从分组 MarkedForMaintenance 更改为分组 InMaintenance。 有趣的是,它确实从 MarkedForMaintenance 分组中移除( View 甚至留下一个空间,就好像该对象仍然存在一样)。

有人知道如何解决我的问题吗?

最佳答案

我认为这里的问题是 View 不知道集合已经改变。您可以尝试将容器从 ItemCollection 更改为 ObservableCollection,它同时实现了 INotifyCollectionChangedINotifyPropertyChanged

关于c# - 分组 ListView 中的项目不更改组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27568259/

相关文章:

c# - WP8:更改BitMapImage时C#应用程序崩溃

c# - 如何实现 WPF 功能区上下文选项卡 MVVM 方式

c# - WCF 私有(private)内存使用增加查询

c# - 如何在不存在的文件夹中自动创建文件?

c# - 如何让 WPF 窗口根据内容自动调整大小

.net - 为什么在 XAML 中设置依赖属性时会在运行时绕过 .NET 属性包装器?

c# - 如何从 byte[], 到 MemoryStream, Unzip, 然后写到 FileStream

IsEnabled 的 WPF 元素数据绑定(bind)(但为 false)

c# - WPF 树不起作用

c# - 如何从 VisualState 更改模板化控件的属性?