PropertyGridその2
2013年6月30日
2022年2月3日
カテゴリでソート順を変えられない件。
有償版のWPF Toolkit Plusでは実装されているみたいで、ISSUES見るとパッチが出ている。
http://wpftoolkit.codeplex.com/workitem/17979
パッチ見ると、CategoryOrderAttributeが実装されているので、これ当てればいけそう。
で、無償版ソースをダウンロード。
http://wpftoolkit.codeplex.com/SourceControl/latest
該当のソース箇所探したけど、けっこう中身が違う。
やっぱり、有償版とはソース変えてるのかな?
まぁ、だいたいやってることわかったので、実装されてるPropertyOrderAttributeの近辺をパクって入れてみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#region CategoryOrder //public int CategoryOrder //{ // get // { // return _categoryOrder; // } // internal set // { // if( _categoryOrder != value ) // { // _categoryOrder = value; // // Notify the parent helper since this property may affect ordering. // this.RaisePropertyChanged( () => this.CategoryOrder ); // } // } //} public static readonly DependencyProperty CategoryOrderProperty = DependencyProperty.Register("CategoryOrder", typeof(int), typeof(PropertyItem), new UIPropertyMetadata(0)); public int CategoryOrder { get { return (int)GetValue(CategoryOrderProperty); } set { SetValue(CategoryOrderProperty, value); } } #endregion //CategoryOrder |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
internal void UpdateCategorization( GroupDescription groupDescription ) { // Clear view values ICollectionView view = this.GetDefaultView(); using( view.DeferRefresh() ) { view.GroupDescriptions.Clear(); view.SortDescriptions.Clear(); // Update view values if( groupDescription != null ) { view.GroupDescriptions.Add( groupDescription ); //SortBy(CategoryPropertyName, ListSortDirection.Ascending); SortBy(CategoryOrderPropertyName, ListSortDirection.Ascending); } SortBy( PropertyOrderPropertyName, ListSortDirection.Ascending ); SortBy( DisplayNamePropertyName, ListSortDirection.Ascending ); } } |
CategoryOrderAttribute.csはPropertyOrderAttribute.csの内容と同様に新規作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; namespace Xceed.Wpf.Toolkit.PropertyGrid.Attributes { [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class CategoryOrderAttribute : Attribute { public int Order { get; set; } public CategoryOrderAttribute(int order) { Order = order; } } } |
ビルドして、できたXceed.Wpf.Toolkit.dllをプロジェクトのパッケージフォルダにコピー。
オブジェクトブラウザで見ると、CategoryOrderができているので、データクラスに属性を指定してみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
namespace FFFE { [DisplayName("変換情報")] public class ConvData : INotifyPropertyChanged { [Category("Size")] [DisplayName("Width")] [Description("変換後の画像の幅")] [CategoryOrder(0)] [PropertyOrder(0)] public decimal Witdh { get; set; } [Category("Size")] [CategoryOrder(0)] [DisplayName("Height")] [Description("変換後の画像の高さ")] [PropertyOrder(1)] public decimal Height { get; set; } [Category("Option")] [DisplayName("ビットレート")] [Description("ビットレート")] [PropertyOrder(2)] [CategoryOrder(1)] public int Bitrate { get; set; } [Category("Option")] [DisplayName("フレームレート")] [Description("フレームレート")] [PropertyOrder(3)] [CategoryOrder(1)] public int Framerate { get; set; } |
カテゴリでソートできた。(∩´∀`)∩