【问题标题】:Item not changing group in a grouped listview项目不更改分组列表视图中的组
【发布时间】:2015-02-18 12:28:49
【问题描述】:

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

这是我的 CollectionViewSource 管理我的分组

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

这是我的列表视图

    <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&lt;Vehicle&gt;,我确保只添加、删除或替换车辆。 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 分组中删除(视图甚至留下了一个空间,就好像对象仍然存在一样)。

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

【问题讨论】:

    标签: c# wpf xaml listview collectionviewsource


    【解决方案1】:

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

    【讨论】:

    • 'ItemCollection' 是集合的名称,它实际上已经是 'ObservableCollection' 类型。我感觉视图确实收到了更改通知,因为当一个对象从一个组移动到另一个组时,一个分组会得到一个空白点,但是该对象永远不会显示到它移动到的组中。我怀疑我使用分组的方式(也许我在 XAML 中定义它们的方式)并不完全正确,或者我遗漏了一些东西。这里有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多