gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:26:59 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com