2014-12-19 2 views
3

나는 자신의 MaintenanceState로 그룹화 된 Vehicle 컬렉션을 보여주는 listView를 가지고 있습니다. 차량의 MaintenanceState가 그룹을 변경하기를 기대한다면. 컬렉션 자체는 올바르게 업데이트되지만 뷰는 그에 따라 업데이트되지 않습니다. 아래는 내 코드 중 일부입니다. 누군가가이 코드를 작동하도록 도울 수 있습니다. 항목이 그룹화 된 목록보기의 그룹을 변경하지 않습니다.

내 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> 

내 ListView에 내 그룹을 여기에

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

가되어 관리되는 ItemCollection 유형 ObservableCollection<Vehicle>이다

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

차량을 추가, 제거 또는 교체해야합니다. MaintenanceStateEnum의 값은 InMaintenance, MarkedForMaintenance 및 Running입니다.

나는 자동차 (3, MaintenanceStateEnum.MarkedForMaintenace)을 가지고 있고이 차량으로 업데이트하는 경우 (3, MaintenanceStateEnum.InMaintenance) :

이 내 차량

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

같은 내 문제 모습입니다 그룹화 된 유지 관리에서 그룹화 된 유지 관리로 변경되지 않습니다. 흥미로운 점은 MarkedForMaintenance 그룹에서 제거된다는 것입니다 (개체가 여전히있는 것처럼보기에도 공백이 남습니다).

아무도 내 문제를 해결할 수있는 방법을 알고 있습니까?

답변

0

여기에서 문제는 컬렉션이 변경되었음을 뷰에서 알 수 없다는 것입니다. ItemCollection에서 INotifyCollectionChangedINotifyPropertyChanged을 모두 구현하는 ObservableCollection에서 컨테이너를 변경하려고 할 수 있습니다.

+0

'ItemCollection'은 컬렉션의 이름이며 실제로 'ObservableCollection '유형입니다. 오브젝트가 한 그룹에서 다른 그룹으로 이동할 때 그룹핑이 빈 곳을 얻으므로 View가 변경 사항에 대한 통지를 받는다는 느낌이 들지만 오브젝트는 이동 한 그룹에 표시되지 않습니다. 그룹화 작업 (XAML에서 정의하는 방법)이 완전히 올바르지 않거나 뭔가 빠졌습니다. 어떤 아이디어가 있습니까? – cherryorange

관련 문제