アプリケーションに「グローバル」検索/フィルター関数を実装する必要があります。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つ(およびおそらくそれ以上)の異なる種類のリストを検索/フィルタリングする必要がある場合、どのようにアプローチすればよいですか?