2016-07-16 6 views
4

もしInProgressであれば、にStateのグループを作成するにはどうしたらいいですか?現時点で特定の条件でDataGridのデータをグループ化する方法はありますか?

public class RecordVm: VmBase 
    { 
     public int Id { get; set; } 
     public string Description { get; set; } 
     public State State { get; set; } 
     public bool IsCompeleted { get; set; } 
    } 
    public enum State 
    { 
     Empty, Opened, InProgress, Completed 
    } 

    public class MainVm : VmBase 
    { 
     public ObservableCollection<RecordVm> RecordVms { get; } = new ObservableCollection<RecordVm>(); 

     public ListCollectionView ListCollection {get;} 

     public MainVm() 
     { 
      ListCollection = new ListCollectionView(RecordVms); 
      ListCollection.GroupDescriptions?.Add(new PropertyGroupDescription("State")); 
     } 
    } 

、私は国家の変種ごとにグループを作成しているが、そのようなオプションが私に合っていません。

<DataGrid ItemsSource="{Binding ListCollection}" 
     Style="{StaticResource AzureDataGrid}" 
     RowStyle="{DynamicResource DataGridRowStyleStateGreen}"> 
<DataGrid.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=Name}" /> 
       </StackPanel> 
      </DataTemplate> 
     </GroupStyle.HeaderTemplate> 
     <GroupStyle.ContainerStyle> 
      <Style TargetType="{x:Type GroupItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type GroupItem}"> 
          <Expander> 
           <Expander.Header> 
            <StackPanel Orientation="Horizontal"> 
             <TextBlock Text="{Binding Path=Name}" /> 
             <TextBlock Margin="5,0,0,0" Text="{Binding Path=ItemCount}"/> 
             <TextBlock Text=" Items"/> 
            </StackPanel> 
           </Expander.Header> 
           <ItemsPresenter /> 
          </Expander> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
</DataGrid.GroupStyle> 

enter code here 
+0

最も簡単な方法は、あなたの代わりにいくつかのグループに – lokusking

+0

@lokuskingをスキップしようとし、そのいずれかによって、あなたのモデルとGRUPに別のプロパティを追加するかもしれない、あなたは私がよりよく理解し、小さな例を作成することは困難ではありませんあなたの案 – Lightness

答えて

3

私が正しくあなたを理解している場合、このかもしれないグループ、あなたがそれを好きな方法: XAMLは手つかずのまま!

モデル

public class RecordVm 
     { 
      public int Id { get; set; } 
      public string Description { get; set; } 
      public State State { 
       get { return this._state; } 
       set { this._state = value; 
        if (value == State.InProgress) 
         this.InProgress = true;return; 
        this.InProgress = false; } 
      } 
      private State _state; 
      public bool IsCompeleted { get; set; } 

      public bool InProgress { get; private set; } 


     } 

コンバータ

public class DisplayConverter : IValueConverter 
     { 
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
      { 
       if (value == null) return ""; 
       if ((bool) value) return "In Progress"; 
       return "Finished"; 
      } 

      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
      { 
       throw new NotImplementedException(); 
      } 
     } 

使用

ListCollection.GroupDescriptions?.Add(new PropertyGroupDescription("InProgress", new DisplayConverter())); 
2

これはあなたの問題を解決するかどうかを確認してください:

ListCollection = new ListCollectionView(RecordVms); 
ListCollection.GroupDescriptions?.Add(new PropertyGroupDescription("State")); 
ListCollection.Refresh(); 

CollectionViewGroup group = (CollectionViewGroup) ListCollection.Groups[0]; 

ListCollectionView viewOfGroup1 = new ListCollectionView(group.Items);    
viewOfGroup1.Filter = ((i) => { return ((RecordVm)i).State == State.InProgress; }); 
viewOfGroup1.Refresh(); 
関連する問題