2016-02-15 43 views
3

我有一個GroupingGrid控制,這基本上是一個自定義DataGrid。我通過使代碼隱藏工作,讓我的ViewModel公開了一個ListCollectionView,並讓C#代碼手動添加PropertyGroupDescription,告訴網格如何重組事情。如何在XAML中爲自定義DataGrid控件指定GroupDescriptions?

我想要做的是,在純XAML來代替,就像這樣:

<controls:GroupingGrid GroupedItemSource="{DynamicResource MyViewSource}" 
         SelectedItem="{Binding MySelectedItem}" 
         ShowGroupingItemCount="True"> 
    <DataGrid.Resources> 
     <CollectionViewSource x:Key="MyViewSource" Source="{Binding ViewModel.MyData}"> 
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="SomeProperty" 
              Converter="{StaticResource MyConverter}" /> 
      </CollectionViewSource.GroupDescriptions> 
     </CollectionViewSource> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <!-- column definitions --> 
    </DataGrid.Columns> 

所以我說這個我GroupingGrid控件的代碼隱藏:

public static readonly DependencyProperty GroupedItemSourceProperty = 
    DependencyProperty.Register("GroupedItemSource", typeof (CollectionViewSource), typeof (GroupingGrid)); 

public CollectionViewSource GroupedItemSource 
{ 
    get { return (CollectionViewSource) GetValue(GroupedItemSourceProperty); } 
    set { SetValue(GroupedItemSourceProperty, value); } 
} 

它建立的,但我得到一個運行時間XamlObjectWriterException說:

Set property'System.Windows.ResourceDicti onary.DeferrableContent'引發了一個異常。

所以基本上,我不能使用DataGrid.Resources在「客戶端XAML」添加東西像CollectionViewSource.GroupDescriptions收藏,因爲我不能重新初始化資源字典實例

是我唯一希望在C#代碼中定義分組,還是有一種整潔的XAML方式?

回答

1

添加CollectionViewSource作爲資源Window/Usercontrol

<Window.Resources> 
    <CollectionViewSource x:Key="MyViewSource" Source="{Binding ViewModel.MyData}"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="SomeProperty" 
             Converter="{StaticResource MyConverter}" /> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 

綁定到你的DataGrid如下

<DataGrid ItemsSource="{Binding Source={StaticResource MyViewSource}}" 
      SelectedItem="{Binding MySelectedItem}"/> 

希望這有助於!

相關問題