我知道很多关于此的话题,但我无法找到解决问题的方法。
ViewModel有一个bool" UserNotification"。如果有一行或多行具有UserNotificatoin = true,则列在标题中显示邮件图标。如果条目有通知,则每行显示相同的邮件图标。
我使用的是SortMemberPath =" UserNotification"并尝试了SortDirection的所有变体,但行为始终是相同的: 当用户在列标题上单击一次时,具有UserNotification = true的条目将排序到最后,只需第二次单击将它们置于顶部。只需点击一下,我们就可以将它们放在首位。
由于多种原因,我们没有使用CollectionView,而是使用ObservableCollection作为成员" TradesView",并用过滤后的条目填充它(在Collection本身中没有排序)。这不应该是问题,因为下一列包含Id(整数),并且排序工作完全正常(单击标题会将最小的数字带到顶部)。
这是xaml代码:
<DataGrid Name="Blotter"
ItemsSource="{Binding TradesView}"
SelectedItem="{Binding Path=SelectedTrade, Mode=TwoWay}"
IsReadOnly="True"
AutoGenerateColumns="False"
CanUserSortColumns="True"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
SelectionMode="Single"
SelectionUnit="FullRow"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
GridLinesVisibility="All"
HorizontalGridLinesBrush="LightGray"
VerticalGridLinesBrush="LightGray">
<DataGrid.InputBindings>
<KeyBinding Key="Enter" Command="{Binding EditTradeCommand}"/>
<KeyBinding Key="Delete" Command="{Binding DeleteTradeCommand}"/>
<KeyBinding Key="F5" Command="{Binding RefreshTradesCommand}"/>
</DataGrid.InputBindings>
<DataGrid.Columns>
<DataGridTemplateColumn SortMemberPath="UserNotification" SortDirection="Descending" Width="Auto">
<DataGridTemplateColumn.Header>
<Image Source="../Resources/Mail.ico" Width="16" Height="16"
Visibility="{Binding ElementName=Blotter,
Path=DataContext.GlobalNotification,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<EventSetter Event="MouseDoubleClick" Handler="Blotter_OnMouseDoubleClick"/>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="../Resources/Mail.ico" Width="16" Height="16"
Visibility="{Binding UserNotification,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Id" SortMemberPath="TradeId" Width="Auto" Binding="{Binding TradeId}" />
</DataGrid.Columns>
</DataGrid>
我尝试了很多选项 - 我甚至将UserNotification更改为整数,因为Id列有效。但它以相同的行为结束。我也试过一个普通的CheckBoxColumn而没有成功。所以我不知道它是否与TemplateColumn本身的实现有关。顺便说一句 - 我已经尝试过没有DataGridTemplateColumn.Header和DataGridTemplateColumn.CellStyle。