2009-10-09 8 views
3

내 ItemsControl 그룹과 관련하여 이상한 문제가 있습니다. 다음과 같은 설치가 있습니다 :그룹화 적용시 WPF 항목이 표시되지 않습니다.

<ItemsControl Margin="3" ItemsSource="{Binding Communications.View}" > 
    <ItemsControl.GroupStyle> 
     <GroupStyle> 
      <GroupStyle.ContainerStyle> 
       <Style TargetType="{x:Type GroupItem}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type GroupItem}"> 
           <Expander> 
            <Expander.Header> 
             <Grid> 
              <Grid.ColumnDefinitions > 
               <ColumnDefinition Width="*" /> 
               <ColumnDefinition Width="Auto" /> 
              </Grid.ColumnDefinitions> 
              <TextBlock Text="{Binding ItemCount, StringFormat='{}[{0}] '}" FontWeight="Bold" /> 
              <TextBlock Grid.Column="1" Text="{Binding Name, Converter={StaticResource GroupingFormatter}, StringFormat='{}Subject: {0}'}" FontWeight="Bold" /> 
             </Grid> 
            </Expander.Header> 
            <ItemsPresenter /> 
           </Expander> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </GroupStyle.ContainerStyle> 
     </GroupStyle> 
    </ItemsControl.GroupStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <TextBlock FontWeight="Bold" Text="{Binding Inspector, Converter={StaticResource NameFormatter}, StringFormat='{}From {0}:'}" Margin="3" /> 
       <TextBlock Text="{Binding SentDate, StringFormat='{}{0:dd/MM/yy}'}" Grid.Row="1" Margin="3"/> 
       <TextBlock Text="{Binding Message }" Grid.Column="1" Grid.RowSpan="2" Margin="3"/> 
       <Button Command="vm:CommunicationViewModel.DeleteMessageCommand" CommandParameter="{Binding}" HorizontalAlignment="Right" Grid.Column="2">Delete</Button> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

내 ViewModel에서 'Communications'라는 CollectionViewSource를 노출합니다. 그래서 같은 그룹화 후두둑를 추가로 진행 :

Communications.GroupDescriptions.Add(new PropertyGroupDescription("Subject")); 

지금, 내가 경험 해요 문제는 그룹화 작업 괜찮지 만, 나는 그룹 내부의 모든 항목을 볼 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 모든 포인터가 많이 감사 할 것입니다.

답변

1

문제를 재현하지 못하는 것 같습니다. CollectionViewSource를 사용하고 있다고 가정합니까? View 속성에 직접 바인딩했기 때문일 수 있습니다. 여기

public class Communication 
{ 
    public string Subject { get; set; } 
    public string Body { get; set; } 
} 

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     var source = (CollectionViewSource)Resources["Communications"]; 
     source.Source = new List<Communication>() 
     { 
      new Communication { Subject = "WPF 4.0", Body = "I love what's happening with 4.0"}, 
      new Communication { Subject = "WPF 4.0", Body = "I hear the text rendering is the best feature"}, 
      new Communication { Subject = "Blend 3.0", Body = "Behaviors in Blend 3 change everything"} 
     }; 

     source.GroupDescriptions.Add(new PropertyGroupDescription("Subject")); 
    } 
} 

XAML - 그것은 내가 당신의 컨버터 또는 명령하지 않기 때문에 당신 그러나 제거 몇 가지와 동일합니다 :

여기 내가 사용하는 C# 코드입니다

<Window 
    x:Class="GroupStyleDemo.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
    > 
    <Window.Resources> 
     <CollectionViewSource x:Key="Communications" /> 
    </Window.Resources> 
    <Grid> 
     <ItemsControl Margin="3" ItemsSource="{Binding Source={StaticResource Communications}}" > 
      <ItemsControl.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type GroupItem}"> 
             <Expander> 
              <Expander.Header> 
               <Grid> 
                <Grid.ColumnDefinitions > 
                 <ColumnDefinition Width="*" /> 
                 <ColumnDefinition Width="Auto" /> 
                </Grid.ColumnDefinitions> 
                <TextBlock Text="{Binding ItemCount, StringFormat='{}[{0}] '}" FontWeight="Bold" /> 
                <TextBlock Grid.Column="1" Text="{Binding Path=Name}" FontWeight="Bold" /> 
               </Grid> 
              </Expander.Header> 
              <ItemsPresenter /> 
             </Expander> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
      </ItemsControl.GroupStyle> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="Auto" /> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition /> 
          <RowDefinition /> 
         </Grid.RowDefinitions> 
         <TextBlock Text="{Binding Body }" Grid.Column="1" Grid.RowSpan="2" Margin="3"/> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

    </Grid> 
</Window> 
+0

VM에서 XAML 리소스를 참조 할 수 없기 때문에 ViewModel CollectionViewSource에 바인딩 할 수 있습니까? 그리고 .View에 직접 바인딩하지 않고 CollectionViewSource에 바인딩하지 않습니다. –

+0

저는 제 스타일 라이브러리에서 ItemsControl 스타일을 정의하고있는 것을 발견했으며, 내 코드에있는 것을 재정의했습니다. 나는 스타일을 제거하고 모든 것이 훌륭합니다! 수업은 배웠다. –

관련 문제