проблема сортировки ListView по столбцу - PullRequest
0 голосов
/ 16 октября 2010

У меня возникла проблема с определением заголовка столбца списка просмотра. В XAML у меня есть это:

ListView Name="myListView" ItemsSource="{Binding MyItemList}" GridViewColumnHeader.Click="ListView_Click"

И когда щелкнет заголовок столбца, я обработаю его следующим образом:


private void ListView_Click(object sender, RoutedEventArgs e)
        {
            GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
            string header = headerClicked.Column.Header as string;
[...]

Вот как я видел сортировку по столбцам во многих выборках. После этого я использую заголовок, чтобы выяснить, по какому столбцу сортировать, и выполняю сортировку.

Моя проблема в том, что headerClicked.Column.Header - это отображаемое имя заголовка столбца, которое отличается для разных языков. Есть ли способ получить какой-то другой тип идентификатора, который не зависит от отображения / языка, а не полагается на строку заголовка?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 октября 2010

Самое простое - использовать свойство Name (или свойство Tag) в заголовке, изменить ваш xaml следующим образом:

<ListView Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" Name="listView1" VerticalAlignment="Top" Width="234">
    <ListView.View>

        <GridView>
            <GridViewColumn Width="100">
                <GridViewColumnHeader Name="Sort1" Content="Header1" Click="Header_Click"/>
            </GridViewColumn>
            <GridViewColumn Width="100">
                <GridViewColumnHeader Name="Sort2" Content="Header2" Click="Header_Click"/>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

Затем вы можете изменить свой обработчик следующим образом:

    private void Header_Click(object sender, RoutedEventArgs e) {
        GridViewColumnHeader header = sender as GridViewColumnHeader;
        String sort = header.Name;
        // Sort code here...
        return;
    }
0 голосов
/ 16 октября 2010

вы можете использовать DisplayMemberBinding:


Binding b = headerClicked.Column.DisplayMemberBinding as Binding;
string header = b != null ? b.Path.Path as string : null;

или же вы можете объявить прикрепленное свойство для каждого заголовка с именем, которое будет использовать и использовать это.

0 голосов
/ 16 октября 2010

Почему бы не использовать IComparer и пользовательский сортировщик и игнорировать все заголовки вместе? Это уберет вашу связь с пользовательским интерфейсом и тем, что вы отображаете, и позволит вам сосредоточиться на бизнес-объекте (модели), на котором должен быть сосредоточен фокус Такое интенсивное использование пользовательского интерфейса никогда не масштабируется и в определенный момент времени создаст головную боль при обслуживании, если это еще не произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...