Visual Studio/WPF > 기본 보기에서 ListView의 정렬을 실현합니다.
17422 단어 myVisualStudioStudyWPF#migrated
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
h tp : /// s ぇ l. ldb㎉g. jp / archi s / 52307556. HTML
를 바탕으로 학습 중.
나열된 코드는
_bookList
의 선언이 없으므로 오류가 발생합니다.옳은지 불분명하지만,
private ObservableCollection<Book> _bookList;
와 같이 선언해 보았다.코드를 간결하게 하기 위해, 삼각의 표시는 넣고 있지 않다.
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();
_bookList = (this.DataContext as BooksData).BookList;
_viewSource = CollectionViewSource.GetDefaultView(_bookList);
}
private GridViewColumnHeader _lastHeaderClicked = null;
private ListSortDirection _lastDirection = ListSortDirection.Ascending;
private ICollectionView _viewSource;
private ObservableCollection<Book> _bookList; // 追加
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.DataContext>
<local:BooksData />
</Window.DataContext>
<Grid>
<ListView Name="listView1" Margin="12"
ItemsSource="{Binding Path=BookList}"
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>
GridHeader 클릭으로 정렬을 변경할 수 있습니다.
(잘못되었을지도 모른다).
Reference
이 문제에 관하여(Visual Studio/WPF > 기본 보기에서 ListView의 정렬을 실현합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/2111aebe1811a7ea9f20텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)