WPF DataGridTemplateColumn排序问题

时间:2016-02-11 15:42:31

标签: c# wpf xaml sorting datagridtemplatecolumn

我知道很多关于此的话题,但我无法找到解决问题的方法。

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。

0 个答案:

没有答案