Visual Studio/WPF > (clickedHeader.Column.DisplayMemberBinding as Binding).Path.Path
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
h tp : /// s ぇ l. ldb㎉g. jp / archi s / 52306698. HTML
를 바탕으로 학습 중.
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
//
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace _170605_t1450_collectionViewSource
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
_viewSource = listView1.ItemsSource as ICollectionView;
}
private GridViewColumnHeader _lastHeaderClicked = null;
private ListSortDirection _lastDirection = ListSortDirection.Ascending;
private ICollectionView _viewSource;
private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
{
GridViewColumnHeader clickedHeader = e.OriginalSource as GridViewColumnHeader;
if (clickedHeader == null)
{
return;
}
if (clickedHeader.Role != GridViewColumnHeaderRole.Padding)
{
ListSortDirection direction = ListSortDirection.Ascending;
if (clickedHeader == _lastHeaderClicked &&
_lastDirection == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
string header = (clickedHeader.Column.DisplayMemberBinding as Binding).Path.Path;
Sort(header, direction);
_lastHeaderClicked = clickedHeader;
_lastDirection = direction;
}
}
private void Sort(string sortBy, ListSortDirection direciton)
{
SortDescription sd = new SortDescription(sortBy, direciton);
_viewSource.SortDescriptions.Clear();
_viewSource.SortDescriptions.Add(sd);
_viewSource.Refresh();
}
}
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public double Price { get; set; }
public DateTime Date { get; set; }
}
public class BooksData
{
public BooksData()
{
BookList = new ObservableCollection<Book>();
BookList.Add(new Book
{
Title = "リファクタリング",
Author = "Martin Fowler",
Date = new DateTime(2000, 5, 1),
Price = 5040,
});
BookList.Add(new Book
{
Title = "アジャイルプラクティス",
Author = "Venkat Subramaniam",
Date = new DateTime(2007, 12, 22),
Price = 2520,
});
BookList.Add(new Book
{
Title = "詳細 正規表現",
Author = "Jeffrey Friedl",
Date = new DateTime(2008, 4, 26),
Price = 5040,
});
}
public ObservableCollection<Book> BookList { get; set; }
}
}
MainWindow.xaml
<Window x:Class="_170605_t1450_collectionViewSource.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:_170605_t1450_collectionViewSource"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="720">
<Window.Resources>
<local:BooksData x:Key="books"/>
<CollectionViewSource x:Key="myView" Source="{Binding Source={StaticResource books}, Path=BookList}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Date"/>
<scm:SortDescription PropertyName="Price"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<ListView Name="listView1" Margin="12"
ItemsSource="{Binding Source={StaticResource myView}}"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler"
>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Title}" Header="書籍名"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Author}" Header="著者"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Date, StringFormat=yyyy年MM月}" Header="出版月"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Price,StringFormat='#,###円'}" Header="価格"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
신경이 쓰이는 부분
이하가 신경이 쓰인 부분.
string header = (clickedHeader.Column.DisplayMemberBinding as Binding).Path.Path;
이 이중의 ".Path"는 무엇이 될 것인가.
브레이크 포인트에서 멈추어 보았다.
(clickedHeader.Column.DisplayMemberBinding as Binding)
는 {System.Windows.Data.Binding}
가 된다.(clickedHeader.Column.DisplayMemberBinding as Binding).Path
는 {System.Windows.PropertyPath}
가 된다.(clickedHeader.Column.DisplayMemberBinding as Binding).Path.Path
는 Author가 된다 (클릭 부분에 따라서 다르다).어리석은 느낌이 넘치지 않는다.
Reference
이 문제에 관하여(Visual Studio/WPF > (clickedHeader.Column.DisplayMemberBinding as Binding).Path.Path), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/6474c19555fdcbe0e23a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)