我正在尝试在一个新项目(基于 WPF 和 Prism)中实现 MVVM,其中几乎每个屏幕( View )都会首先显示一个搜索屏幕,用户可以在其中选择添加/编辑记录。
搜索屏幕引用了实现我的接口(interface)之一 ISearchProvider 的 VM(它有一个方法 IEnumerable Search(字符串条件))。
如果这个 Search 方法返回
最佳答案
无论您打算向用户展示什么,都应该使用 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点:
关于c# - 如何实现搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114364/