我有一个listView,其中显示了按维护状态分组的车辆集合。如果车辆的维护状态更新,我希望它更改组。集合本身已正确更新,但视图不会相应更新。下面是我的一些代码,也许有人可以帮助我实现这一点。
这是我的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>
,我确保只添加,删除或替换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.MarkedForMaintenace)并且它更新为Vehicle(3,MaintenanceStateEnum.InMaintenance),它不会从分组MarkedForMaintenance更改为分组InMaintenance。 有趣的是它确实从MarkedForMaintenance分组中删除了(视图甚至留下了一个空间,好像对象仍在那里)。
有谁知道如何解决我的问题?
答案 0 :(得分:0)
我认为这里的问题是视图不知道集合已经改变。您可以尝试将容器从ItemCollection
更改为ObservableCollection
,同时实现INotifyCollectionChanged
和INotifyPropertyChanged
。