gpt4 book ai didi

c# - 如何实现搜索?

转载 作者:行者123 更新时间:2023-12-03 11:00:37 24 4
gpt4 key购买 nike

我正在尝试在一个新项目(基于 WPF 和 Prism)中实现 MVVM,其中几乎每个屏幕( View )都会首先显示一个搜索屏幕,用户可以在其中选择添加/编辑记录。

搜索屏幕引用了实现我的接口(interface)之一 ISearchProvider 的 VM(它有一个方法 IEnumerable Search(字符串条件))。

如果这个 Search 方法返回

  • 一组虚拟机(其模型设置正确)将显示在搜索屏幕的网格中或
  • 只是模型,这样当用户选择编辑记录(模型)时,选择的模型会被提供给 VM 的实例,然后它会被编辑或
  • 第三种选择?
  • 最佳答案

    无论您打算向用户展示什么,都应该使用 View Model 进行包装。

    您提到用户将选择要编辑的模型。这应该是 查看模型 ;用户将选择模型(实体)进行编辑,但他将显示的内容(或您的 View 将看到的内容)应该是代表某个实体的 View 模型列表。用户(或在这种情况下是 View )不需要任何实际模型的知识。

    现在, View 模型本身不应该进行任何搜索。应该是代表搜索组件的职责是执行搜索并返回结果(无论是某种 DAO,您的自定义工具 - 选项可能会有所不同)。更重要的是,同一个 View 模型还应该负责为 View “提供”可能来自搜索或可能不来自搜索的数据。

    给它代码示例:

    public class UserListViewModel : ISearchProvider
    {
    private IUserFinder userFinder;

    public UserListViewModel(IUserFinder userFinder)
    {
    this.userFinder = userFinder;
    }

    public ObservableCollection<UserViewModel> Users { get; private set; }

    public void Search(string criteria)
    {
    var users = this.userFinder.Search(criteria);
    // rebuild users collection - view will get notified of any changes
    // made to .Users property as it is ObservableCollection
    }
    }

    此外,让 ISearchProvider 接口(interface)公开单个 Search 可能是个好主意。 命令 .这样,从 View 绑定(bind)非常简单。

    总结一下,简单的2点:
  • 确保您的搜索逻辑不在 View 模型中;让 View 模型委托(delegate)搜索
  • 使搜索结果成为 View 模型或实际 View 模型对象的一部分(因此您可以“喂”它们以轻松查看)
  • 关于c# - 如何实现搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114364/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com