添付プロパティにしちゃえばいいんじゃない ?
ListView のソート実装の件。詳細はまた書きます。
public class GridViewSortHelper { protected ListView listView; protected GridViewColumnHeader lastSortedHeader; protected ListSortDirection lastSortDirection = ListSortDirection.Ascending; /// <summary> /// <c>GridViewSortHelper.SortKey</c> 添付プロパティ /// </summary> /// <value>ソートに使用するキー文字列</value> public static readonly DependencyProperty SortKeyProperty = DependencyProperty.RegisterAttached ("SortKey", typeof (string), typeof (GridViewSortHelper), new FrameworkPropertyMetadata ("")); /// <summary> /// 要素に <c>GridViewSortHelper.SortKey</c> 添付プロパティを設定します。 /// </summary> /// <param name="element">プロパティ値の書き込み対象の要素。</param> /// <param name="value">要素の <c>GridViewSortHelper.SortKey</c> 属性値</param> public static void SetSortKey (GridViewColumn element, string value) { element.SetValue (SortKeyProperty, value); } /// <summary> /// 要素の <c>GridViewSortHelper.SortKey</c> 添付プロパティを取得します /// </summary> /// <param name="element"> プロパティ値の読み取り元の要素。</param> /// <returns>要素の <c>GridViewSortHelper.SortKey</c> 属性値</returns> public static string GetSortKey (GridViewColumn element) { return (string) element.GetValue (SortKeyProperty); } /// <summary> /// コンストラクタ /// </summary> /// <param name="listView">ソート対象の ListView</param> public GridViewSortHelper (ListView listView) { this.listView = listView; } /// <summary> /// ヘッダクリック時処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void OnHeaderClicked (object sender, RoutedEventArgs e) { var headerClicked = e.OriginalSource as GridViewColumnHeader; if (headerClicked != null) { var direction = ListSortDirection.Ascending; if (headerClicked == lastSortedHeader) { if (lastSortDirection == ListSortDirection.Ascending) { direction = ListSortDirection.Descending; } } var key = GetSortKey (headerClicked.Column); var dataView = CollectionViewSource.GetDefaultView (this.listView.ItemsSource); dataView.SortDescriptions.Clear (); var sortDescription = new SortDescription (key, direction); dataView.SortDescriptions.Add (sortDescription); dataView.Refresh (); lastSortedHeader = headerClicked; lastSortDirection = direction; } } }
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/2287
コメント