2011-09-26 18 views
0

這裏是我定義的DataGrid中DataGrid列的排序問題,排序看起來不錯視覺不過的ItemSource還是一樣

   <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 

它是否應該重新安排引用數據源呢?

回答

0

我認爲你真正的問題是要得到正確的選擇項目。所以請不要使用

<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

這聽起來像是一個bug。 ItemsSource不應該按網格排序。

1

我不太瞭解Toolkit DataGrid,但如果它像WPF中的其他任何東西,它將不會對您的基礎ItemsSource進行排序。 (怎麼可能呢?你的ItemsSource可能是一個只讀的IEnumerable。)相反,它會創建一個包裝你的ItemsSource項目的集合視圖,並且集合視圖是被排序的。集合視圖是WPF如何支持排序和分組。

如果要獲取對收集視圖(其中包含排序列表)的引用,請參閱「How to: Get the Default View of a Data Collection」。

0

不是它應該這樣做的,它只是假設您有大量數據源並將其可視化到數據網格中,並且每次在datagrid中對它進行排序以重新排列數據源時,就可視化您的數據!你可以通過掛鉤處理程序來完成。
順便說一下,如果您可以使用.NET 4.0,則不需要工具包,它將datagrid控件作爲嵌入式數據元素。