2017-05-11 28 views
1

これはイライラしています。グループ化ListView WPF

ビュー:

<Window.Resources> 
     <CollectionViewSource x:Key="GroupedItems" Source="{Binding Viewers}"> 
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="Sort" /> 
      </CollectionViewSource.GroupDescriptions> 
     </CollectionViewSource> 
    </Window.Resources> 
    <Grid> 
     <ListView 
      Width="244" 
      Height="184" 
      Margin="46,85,0,0" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      ItemsSource="{Binding Source={StaticResource GroupedItems}}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <WrapPanel> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock 
           Margin="10,0,0,0" 
           VerticalAlignment="Center" 
           FontWeight="Bold" 
           Text="{Binding Path=Name}" /> 
         </StackPanel> 
        </WrapPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      <ListView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate> 
             <Expander 
              BorderThickness="0" 
              DataContext="{Binding Items}" 
              IsExpanded="True"> 
              <Expander.Header> 
               <StackPanel Orientation="Horizontal"> 
                <TextBlock 
                 VerticalAlignment="Top" 
                 FontSize="22" 
                 FontWeight="Bold" 
                 Foreground="Gray" 
                 Text="{Binding Sort}" /> 
               </StackPanel> 
              </Expander.Header> 
              <ItemsPresenter /> 
             </Expander> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
      </ListView.GroupStyle> 
     </ListView> 

のViewModel:

public class MainWindowViewModel { 
     public ObservableCollection<MainWindowModel.Viewer> Viewers { get; set; } 

     public MainWindowViewModel() { 
      Viewers = new ObservableCollection<MainWindowModel.Viewer> { 
       new MainWindowModel.Viewer { 
        Name = "Hans", 
        Sort = MainWindowModel.SortDir.Admin 
       }, 
       new MainWindowModel.Viewer { 
        Name = "Peter", 
        Sort = MainWindowModel.SortDir.Mod 
       }, 
       new MainWindowModel.Viewer { 
        Name = "Frank", 
        Sort = MainWindowModel.SortDir.Admin 
       }, 
       new MainWindowModel.Viewer { 
        Name = "Bilbo", 
        Sort = MainWindowModel.SortDir.Admin 
       }, 
      }; 
     } 
    } 

モデル: 私はこのようになりTestapplication、作った

public class MainWindowModel { 
     public class Viewer { 
      public string Name { get; set; } 
      public SortDir Sort { get; set; } 
     } 


     public enum SortDir { 
      Admin, 
      Mod, 
     } 
    } 

をうん、すべてが動作します。 私は期待される結果を得ます。 Expected result


だから、今私はポートに私の「実際の」アプリケーションに、この「機能」(グループ化されたリストビューを)したいが、私はそれがグループで仕事を得るいけません。詳細については 、私のビュー:

モデル
<controls:MetroContentControl.Resources> 
     <CollectionViewSource x:Key="GroupedItems" Source="{Binding ChatHandler.Viewers}"> 
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="Type" /> 
      </CollectionViewSource.GroupDescriptions> 
     </CollectionViewSource> 
    </controls:MetroContentControl.Resources> 
...... 
<ListView 
      Name="lvUsers" 
      Grid.Column="1" 
      ItemsSource="{Binding Source={StaticResource GroupedItems}}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <WrapPanel> 
         <StackPanel Orientation="Horizontal"> 
          <Rectangle 
           Name="Mod" 
           Width="24" 
           Height="24" 
           Fill="Black"> 
           <Rectangle.OpacityMask> 
            <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_crown}" /> 
           </Rectangle.OpacityMask> 
           <Rectangle.Style> 
            <Style TargetType="Rectangle"> 
             <Setter Property="Visibility" Value="Hidden" /> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Path=IsMod, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
               <Setter Property="Visibility" Value="Visible" /> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </Rectangle.Style> 
          </Rectangle> 
          <Rectangle 
           Name="Sub" 
           Width="24" 
           Height="24" 
           Fill="Black"> 
           <Rectangle.OpacityMask> 
            <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_heart}" /> 
           </Rectangle.OpacityMask> 
           <Rectangle.Style> 
            <Style TargetType="Rectangle"> 
             <Setter Property="Visibility" Value="Hidden" /> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Path=IsSub}" Value="True"> 
               <Setter Property="Visibility" Value="Visible" /> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </Rectangle.Style> 
          </Rectangle> 
          <TextBlock 
           Margin="10,0,0,0" 
           VerticalAlignment="Center" 
           FontWeight="Bold" 
           Text="{Binding Path=Name}" /> 
         </StackPanel> 
        </WrapPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      <ListView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate> 
             <Expander 
              Background="Transparent" 
              BorderThickness="0" 
              DataContext="{Binding Items}" 
              Foreground="Transparent" 
              IsExpanded="True"> 
              <Expander.Header> 
               <StackPanel Orientation="Horizontal"> 
                <TextBlock 
                 VerticalAlignment="Top" 
                 FontSize="22" 
                 FontWeight="Bold" 
                 Foreground="Gray" 
                 Text="{Binding Type}" /> 
               </StackPanel> 
              </Expander.Header> 
              <ItemsPresenter /> 
             </Expander> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
      </ListView.GroupStyle> 
      <ListView.ContextMenu> 
       <ContextMenu Name="ViewerContextMenu"> 
        <MenuItem Command="{Binding MuteCommand}" Header="Mute Viewer" /> 
        <MenuItem Command="{Binding UnmuteCommand}" Header="Unmute Viewer" /> 
        <MenuItem Command="{Binding ModCommand}" Header="Mod Viewer" /> 
        <MenuItem Command="{Binding UnmodCommand}" Header="Unmod Viewer" /> 
        <MenuItem Command="{Binding ShowUserInfo}" Header="User Information" /> 
       </ContextMenu> 
      </ListView.ContextMenu> 
     </ListView> 

[PropertyChanged.ImplementPropertyChanged] 
     public class Viewers { 
      public bool IsMod { get; set; } 
      public bool IsSub { get; set; } 
      public string Name { get; set; } 
      public string TwitchID { get; set; } 
      public SortDirectionListView Type { get; set; } 
     } 

     public enum SortDirectionListView { 
      Admin, 
      Mod, 
      Subscriber, 
      Follower, 
      Viewer 
     } 

私のViewModelはただ視聴者とコレクションが含まれています。

public ObservableCollection<Models.Chat.Viewers> Viewers { get; set; } 

は今私の問題:デバッガで 私は2人の視聴者を見ることができるとの両方を切り抜いた「タイプ」を持っている: enter image description here

しかし、両方が「モッズ」として表示されます。ビューアではありません:enter image description here

私のテストアプリケーションと私の実際のアプリケーションとの間に違いは見られません。なぜ最初のものが動作するのか分かりませんが、2番目のものはありません。

多分私は何かを忘れましたか? 読んでいただきありがとうございます!

答えて

2

私は最終的に私の問題の解決策を見つけました。 問題: 私の例では、リストビューを '描画'する前にアイテムを追加します。

私の実際のアプリケーションでは、ユーザーはイベントからリストに追加されます。 私は自分のアプリケーションに、私はリストビューをリフレッシュしたいと伝える必要があります。

私たちは行く、私はCollectionViewSource "LiveGroupingProperties"に追加します。

<CollectionViewSource 
     x:Key="cvsViewers" 
     IsLiveGroupingRequested="True" 
     Source="{Binding ChatHandler.Viewers}"> 
     <CollectionViewSource.LiveGroupingProperties> 
      <clr:String>Type</clr:String> 
     </CollectionViewSource.LiveGroupingProperties> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="Type" /> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
関連する問題