Проблема сортировки столбцов Datagrid, визуально сортировка выглядит хорошо, но ItemSource остается тем же - PullRequest
0 голосов
/ 27 сентября 2011

Вот как я определил DataGrid

                <toolkit:DataGrid 
                    Height="{Binding ElementName=parentCanvas, Path=ActualHeight}" 
                    Width="{Binding ElementName=parentCanvas, Path=ActualWidth}"
                    SelectionMode="Single" 
                    ScrollViewer.VerticalScrollBarVisibility="Auto"
                    SelectedIndex="{Binding CurrentSelectedIdx}" 
                    ItemsSource="{Binding Path=GameHostDataList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                    AutoGenerateColumns="False" 
                    x:Name="gamehostsDataGrid" 
                    IsReadOnly="True" 
                    Visibility="{Binding Path=GhListVisibility}">
                    <toolkit:DataGrid.Columns>
                        <toolkit:DataGridTextColumn Binding="{Binding FacilityId}" Header="Facility ID" MinWidth="45" Width="45*" IsReadOnly="True" SortMemberPath="FacilityId"/>
                        <toolkit:DataGridTextColumn Binding="{Binding FacilityName}" Header="Facility Name" MinWidth="100" Width="110*" IsReadOnly="True" SortMemberPath="FacilityName"/>
                        <toolkit:DataGridTextColumn Binding="{Binding GameHostIp}" Header="GH IP" MinWidth="70" Width="75*" IsReadOnly="True" SortMemberPath="GameHostIp"/>
                        <toolkit:DataGridTextColumn Binding="{Binding Status}" Header="Status" MinWidth="80" Width="85*" IsReadOnly="True" SortMemberPath="Status"/>
                        <toolkit:DataGridTemplateColumn Header="" Width="Auto" MinWidth="24">
                            <toolkit:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip="Delete"
                                        Command="{StaticResource deleteGhCommand}" Focusable="False"
                                        Width="24" Height="24">
                                        <Image Source="pack://application:,,,/DesktopShell;component/Resources/Buttons/Aha-Soft/No-entry.png" />
                                    </Button>
                                </DataTemplate>
                            </toolkit:DataGridTemplateColumn.CellTemplate>
                        </toolkit:DataGridTemplateColumn>
                    </toolkit:DataGrid.Columns>
                    <e:Interaction.Triggers>
                        <e:EventTrigger EventName ="SelectionChanged">
                            <b:CommandAction Command="{Binding DisplayGhCommand}"/>
                        </e:EventTrigger>
                    </e:Interaction.Triggers>
                </toolkit:DataGrid>

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

        ObservableCollectionEx<GamehostDataModel> gameHostDataList = new ObservableCollectionEx<GamehostDataModel>();

После сортировки столбца в сетке, нажав на заголовок столбца,записи выглядят отсортированными, но когда я нажимаю на первую строку, появляются данные, соответствующие несортированному списку.Мне просто интересно, какова корреляция между визуальным представлением источника предметов и фактическими данными источника предметов?

Скажем, например:

Data Visually         Data Itemsource
2                     2
3                     3
1                     1

После нажатия на заголовок для сортировки мы имеем

Data Visually         Data Itemsource
1                     2
2                     3
3                     1

Предполагается ли также реорганизовать источник справочных данных?

Ответы [ 4 ]

1 голос
/ 27 сентября 2011

Я не знаю много о DataGrid из Toolkit, но если он похож на что-либо еще в WPF, он не будет сортировать ваш базовый ItemsSource. (Как это может быть? Ваш ItemsSource может быть IEnumerable только для чтения.) Вместо этого он создаст представление коллекции, которое обернет ваши элементы ItemsSource, а представление коллекции будет отсортировано. Представления коллекции - это то, как WPF поддерживает сортировку и группировку.

Если вы хотите получить ссылку на представление сбора (которое содержит отсортированный список), см. « Как: получить представление сбора данных по умолчанию ».

1 голос
/ 27 сентября 2011

Это звучит как ошибка для меня. ItemsSource НЕ должен сортироваться по сетке.

0 голосов
/ 27 сентября 2011

Я предполагаю, что ваша настоящая проблема заключается в том, чтобы получить правильно выбранный предмет. поэтому, пожалуйста, НЕ используйте

 <DataGrid SelectedIndex="{Binding CurrentSelectedIdx}" 
      <e:Interaction.Triggers>
           <e:EventTrigger EventName ="SelectionChanged">
               <b:CommandAction Command="{Binding DisplayGhCommand}"/>
           </e:EventTrigger>
      </e:Interaction.Triggers>

вы должны использовать свойство SelectedItem, чтобы получить то, что вы хотите.

 <DataGrid SelectedItem="{Binding MyViewModelSelectedItemProperty}" ...
0 голосов
/ 27 сентября 2011

НЕТ, это не должно быть сделано, это визуализация ваших данных, просто предполагается, что у вас есть огромный источник данных, и вы визуализируете его в сетке данных, и каждый раз, когда вы сортируете эту сетку данных, она перестраивает ваш источник данных! Вы можете сделать это, подключив обработчик.
Кстати, вам не нужен инструментарий, если вы можете использовать .NET 4.0, он имеет элемент управления сеткой данных как встроенный элемент данных.

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