Bir MVVM tasarım deseni kullanarak ilk WPF uygulamamı uygulamaya çalışıyorum.WPF4 Datagrid sütun başlıkları üzerinde sıralanmaz
ObservableCollection <> 'a bağlanan bir uygulama oluşturdum. Uygulama iyi sonuç veriyor, ancak sütun başlıklarını tıklattığımda datagrid'in satırları yeniden sıralamasını bekliyorum.
Belirtilen gönderileri araştırdım: Veri kaynağı IEnumerable uygulamak zorundadır, benimki. CanUserSortColumns ve/veya CanUserSort (her sütun) ayarlamak gerekir, ben yaptım. Sıralama geri çağırma işlevini belirterek özel bir sıralama uygulayabilirim.
Bunların hiçbiri yardımcı olmadı. Hata ayıklayıcısında, _customerGrid_Sorting işlevim asla çağrılmaz ve sütun başlıklarını tıklatmanın hiçbir etkisi olmaz.
Aşağıdaki XAML'de bir şey eksik mi? Uygulamam gereken başka bir arayüz var mı? Şu an çok kayıp hissediyorum, bu yüzden herhangi bir yardım takdir edilmektedir.
XAML:
<DataGrid Name="_customerGrid"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
HorizontalAlignment="Left"
ItemsSource="{Binding Path=AllCustomers}"
RowDetailsVisibilityMode="VisibleWhenSelected"
RowStyle="{StaticResource DataGridRowStyle}"
SelectionUnit="FullRow"
Sorting="_customerGrid_Sorting"
VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Cust ID" MinWidth="90" CanUserSort="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=CustID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name" MinWidth="300" CanUserSort="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Teşekkürler Guru, biraz yardımcı olur. En azından varsayılan sıralama davranışının neden çalışmadığını biliyorum.Anladığım kadarıyla özel bir sıralama yapmam gerekiyor. DataGrid'in Sıralama özniteliğinde bir işleyici belirterek yapabileceğimi düşündüm. Ama işleyicim ateş etmiyor. Daha fazla yön vermek için kod örneğini almayı dört gözle bekliyorum. –
@Paul - "SortMemberPath" adlı bir özniteliği kaçırdığınızı düşünüyorum. Umarım yardımcı olur!! – GuruC
Harika cevap Guru! Yardımın için teşekkürler! DataGridTemplateColumn üzerinde SortMemberPath = "CustID" (örneğin) belirterek bunu ekleyeceğim, DataGrid'teki Sıralama özniteliğini ortadan kaldırarak ve özel IComparer uygulamamı kaldırabildim. Senin cevabın başkalarına yardım ediyorum. Herhangi birinin çözümü hakkında soruları varsa, onlara yardım etmeye çalışacağım. –