我必须在我的应用程序中实现“全局”搜索/过滤功能。每个包含信息列表的窗口,无论是 DataGrid 还是其他列表的实现,都必须有一个搜索框,如果用户在搜索框中输入文本,它会根据正在搜索的内容过滤该列表。我只想实现一次搜索逻辑。
在大多数情况下,这不一定太难。原因是大多数包含列表的窗口都基于相同的数据类型。这些都是 ViewModel,每个 ViewModel 都扩展 ViewModelBase,而 ViewModelBase 包含我将要搜索的数据。
一个基本的例子:
public class ZoneVm : ViewModelBase
{
// Zone specific functionality
}
public class UserVm : ViewModelBase
{
// User specific functionality
}
public class ViewModelBase : INotifyPropertyChanged
{
public string Name { get; set; }
public int Value { get; set; }
// The handy thing about the common view model base is that
// I can contain the model binding in a single place
// It will be easy to search List<ZoneVm> and List<UserVm> because
// they are both effectively List<ViewModelBase>.
}
困难在于我必须搜索的异常对象。一些窗口包含一个不扩展 ViewModelBase 的对象列表,所以我不会有这个可预测的属性列表来搜索,例如
public class PanelData // doesn't implement ViewModelBase :-(
{
public int SerialNumber { get; set; }
public Customer Customer { get; set; }
// other properties that I'll have to search/filter on
}
这类任务是否有“最佳实践”方法?有解决这个问题的设计模式吗?我应该如何处理必须搜索/过滤 2(可能更多)不同类型的列表?