使用MvvM和WPF创建动态搜索

使用MvvM和WPF创建动态搜索,wpf,mvvm,Wpf,Mvvm,我是mvvm和WPF的新手,所以我正在寻找一些指针来实现以下目标 我想在我的应用程序中创建一个搜索部分,根据用户选择的标准建立搜索选项 例如,搜索的第一个组合框提供了顶级选择: 发信日期 网关 方向 等等。。 第二部分是我的接线员 因此,例如,如果选择了消息的日期,则会向用户提供另一个选项组合框 介于 上周 上个月 等等 搜索的最后一部分基于上面的运算符,因此如果选择了介于之间,则表单将显示两个日期选择器from和to。如果另一方面选择了Last Week,则不会显示任何内容,因为一旦单击我的

我是mvvm和WPF的新手,所以我正在寻找一些指针来实现以下目标

我想在我的应用程序中创建一个搜索部分,根据用户选择的标准建立搜索选项

例如,搜索的第一个组合框提供了顶级选择:

发信日期

网关

方向

等等。。

第二部分是我的接线员

因此,例如,如果选择了消息的日期,则会向用户提供另一个选项组合框

介于

上周

上个月

等等

搜索的最后一部分基于上面的运算符,因此如果选择了介于之间,则表单将显示两个日期选择器from和to。如果另一方面选择了Last Week,则不会显示任何内容,因为一旦单击我的搜索按钮,搜索可以直接调用我的SetActionLogsForLastWeek()方法

如果用户从初始列表中选择网关,则会生成另一个组合框,其中包含基于网关的选项列表

我正在寻找一篇教程或以前的文章,它为我指明了正确的方向,帮助我实现基于其他元素的选择构建WPF元素的目标


谢谢

这是一个相当广泛的问题,因此没有明确的答案。我将描述我将如何处理这个问题。请记住,这可能不是最好的解决方案

为了呈现依赖于第一个组合框的控件,请使用数据模板和不同的视图模型。在主视图的“资源”部分或外部资源(如果已定义外部资源)中,编写如下内容:

<DataTemplate DataType="{x:Type vm:YourViewModel}"> <vw:YourView /> </DataTemplate>
顺便说一句,BaseViewModel是所有视图模型继承自的抽象类。它实现INotifyPropertyChanged。 在主视图中,将内容控件绑定到控件视图模型以及第一个组合框就足够了:

如前所述,在resources.xaml中定义数据模板

<DataTemplate DataType="{x:Type vw:GatewayControlViewModel}"> <vw:GatewayView /> </DataTemplate>

如果主视图中ContentControl绑定到的ViewModel等于GateWayControlViewModel,则这将呈现GateWayView。最后,您的网关视图可能如下所示:

<ComboBox ItemsSource="{Binding Gateways}" 
        SelectedValue="{Binding SelectedGateway}" />

显然,您必须确保您的GatewayControlViewModel实际包含视图中提到的项和属性。它还需要从BaseViewModel派生


我希望这能给你一些想法。此外,您可能会发现它很有用(因为它包含一些关于如何接近MVVM的非常有用的提示)。

如果您想在集合中实现搜索,例如在组合框或网格中,您应该阅读一些关于ICollectionView的信息。ICollectionView允许您根据搜索条件筛选集合。在您的示例中,您还可以通过在viewmodel和create方法中处理选择更改事件来完成此操作,以基于选定的输入更新数据

<DataTemplate DataType="{x:Type vw:GatewayControlViewModel}"> <vw:GatewayView /> </DataTemplate>
<ComboBox ItemsSource="{Binding Gateways}" 
        SelectedValue="{Binding SelectedGateway}" />