【问题标题】:Which command should I use to perform a search?我应该使用哪个命令来执行搜索?
【发布时间】:2011-10-19 21:33:20
【问题描述】:

我正在使用 .NET 4 开发一个 WPF 应用程序。我还试图将 WPF 命令的概念包起来,而不是总是依赖事件,就像我在过去 1 年所做的那样。我试图弄清楚要使用哪个命令。我遇到了一个搜索命令,它似乎是 NavigationCommands 的一部分,对我来说使用起来没有意义。我还找到了 Find 命令,但它与 Control-F 相关联,这让我认为它用于在文档(如 Word 文档)中查找搜索,所以再一次,这对我来说并不合适。

这就是我想要完成的。我将在 Windows 上设置一些文本框,例如名字、姓氏、SSN 和 DOB。我想让用户可以输入其中的任何一个或全部,然后单击一个按钮。然后它会在我们的数据库中搜索与用户提供的参数匹配的所有记录。然后它将返回的结果放在同一窗口的列表框中。

为此我使用什么 WPF 命令?

【问题讨论】:

    标签: wpf command


    【解决方案1】:

    没有 WPF 命令会神奇地为您做到这一点。

    您必须为此编写代码。

    现在有两种选择...

    1. 如果您使用MVVM 模式,则必须使用DelegateCommands
    2. 否则RoutedComamnds 可以。

    对于 RoutedCommands,您可以使用自定义路由命令或使用现有 NavigationCommand.Search 或查找命令,您只需应用 CommandBindings。使用CommandBindings,您必须提供一个OnExecuted 处理程序,您的逻辑将被放入其中。

    现在要提取用户在文本框中键入的内容,您可以使用CommandParameter 将文本框绑定到命令...

    例如

    下面是一个简单的代码,当用户在 TetxBox 中输入他/她的名字并点击“Hit Me!”时,它会显示“Hello World”。按钮,其中配置了命令。如果用户清除文本框(即无效输入),该命令还会禁用按钮。

    XAML

        <Button Command="NavigationCommands.Search"
                CommandParameter="{Binding Text, ElementName=UserNameTextBox}"
                Content="Hit Me!">
            <Button.CommandBindings>
                <CommandBinding Command="NavigationCommands.Search"
                                Executed="OnSearchCommandExecuted"
                                CanExecute="CanSearchCommandExecute"/>
            </Button.CommandBindings>
        </Button>
        <TextBox Name="UserNameTextBox"
                 Text="(Enter User Name)">            
        </TextBox>
    

    代码背后...

        private void OnSearchCommandExecuted
           (object sender, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show("Hello World " + e.Parameter.ToString());
        }
    
        private void CanSearchCommandExecute
           (object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = !string.IsNullOrEmpty(e.Parameter.ToString());
        }
    

    希望这会有所帮助...

    【讨论】:

    • 我认为 NavigationCommands.Search 通常用于通过导航服务从一个 WPF 页面到另一个页面,并将某种搜索参数传递到第二个页面,我是否正确?
    • 看看它可以用于任何事情......就像在我的例子中一样。 :-) 只是它的行为必须由我们定义,但它的键盘手势是预定义的。
    • 好的,我还要补充一点,我们正在尝试使用 MVVM 设计模式来实现这个应用程序。所以我想这意味着我们将不得不使用 DelegateCommands 或类似的东西。但我想知道 NavigationCommands.Search 的用途是什么?
    • 您从第一次回复中对NavigationCommands.Search 的假设是正确的。现在至于DelegateCommands,它们也可以用于相同的功能。只是他们不会添加命令绑定,因为在 viewmodel 中创建这些命令时指定了他们的 ExecuteCanExecute 委托。
    【解决方案2】:

    在这种情况下应使用自定义命令。您想使用命令绑定和 RoutedCommand 类。看here in the example section。这应该提供有关如何制作简单自定义命令的基本信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-31
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 2018-11-25
      相关资源
      最近更新 更多