项目不会更改分组列表视图中的组

时间:2014-12-19 14:40:59

标签: c# wpf xaml listview collectionviewsource

我有一个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分组中删除了(视图甚至留下了一个空间,好像对象仍在那里)。

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

1 个答案:

答案 0 :(得分:0)

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