WPF多条件绑定过滤

时间:2017-02-16 11:43:15

标签: wpf xaml binding datagrid

我是WPF的新手以及所有这些神奇的绑定和数据触发器的东西,所以我请你帮忙。

我有一个简单的wpf应用程序如下图所示。 enter image description here

我希望我的datagrid内容能够反映条件和日期过滤器。我已经想出了如何根据事件代码和复选框(启动,停止,错误)绑定datagrid行可见性。但我不知道如何实现日期过滤。我想要的是:当选中“按日期过滤”复选框时,在我的数据网格中只有那些行保持可见,其中“服务器时间”字段中的日期(我想我需要从日期时间以某种方式解析它)等于所选日期组合框。 我可以只使用xaml实现吗? enyone能帮助我做到这一点吗? 这是我的datagrid的xaml:

<DataGrid
        Grid.Row="1"
        Margin="5"
        AutoGenerateColumns="False"
        IsReadOnly="True"
        ItemsSource="{Binding LogEntries}"
        Style="{DynamicResource Helvetica}">
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding event_code}" Value="1">
                        <Setter Property="Background" Value="LightGreen" />
                        <Setter Property="Visibility" Value="{Binding IsChecked, ElementName=StartShowChecked, Converter={StaticResource BooleanToVisibilityConverter}}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding event_code}" Value="2">
                        <Setter Property="Background" Value="LightGray" />
                        <Setter Property="Visibility" Value="{Binding IsChecked, ElementName=StopShowChecked, Converter={StaticResource BooleanToVisibilityConverter}}" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding event_code}" Value="3">
                        <Setter Property="Background" Value="#FFEA816F" />
                        <Setter Property="Visibility" Value="{Binding IsChecked, ElementName=ErrorShowChecked, Converter={StaticResource BooleanToVisibilityConverter}}" />
                    </DataTrigger>

                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding server_datetime, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}" Header="Server time" />
            <DataGridTextColumn Binding="{Binding user_datetime, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}" Header="Client time" />
            <DataGridTextColumn
                Width="*"
                Binding="{Binding log_entry}"
                Header="Entry" />

        </DataGrid.Columns>

2 个答案:

答案 0 :(得分:1)

  

我能用xaml实现吗?

不,你不能,因为XAML是标记语言而已。

您要做的是将日期SelectedItem的{​​{1}}绑定到视图模型的ComboBox属性,并绑定“过滤器的DateTime属性“CheckBox到视图模型的IsChecked属性,并在设置bool源属性时过滤LogEntries源集合,例如:

IsChecked

答案 1 :(得分:0)

我怀疑只有在XAML中才有办法,因为过滤需要您指定如何过滤(例如通过创建谓词)。
我建议从ItemsSource(我假设是一个ObservableCollection)获取ICollectionView并设置它的Filter属性。
有关详细信息,请查看此答案:Filter a DataGrid in WPF