Все, что вы планируете показать пользователю, должно быть обернуто в View Model.
Вы упомянули, что пользователь выберет модель для редактирования .Это должно быть просмотр модели ;пользователь выберет модель (сущность) для редактирования, но то, что он будет показан (или то, что увидит ваш вид), должно быть списком моделей представлений, представляющих некоторую сущность.Пользователю (или в данном случае представлении) не требуется никаких знаний о реальной модели.
Теперь модель представления не должна выполнять какой-либо сам поиск .Он должен делегировать поиск в компонент, ответственность за который заключается в том, чтобы выполнить поиск и вернуть результат (будь то DAO, ваш пользовательский инструмент - параметры могут отличаться).Более того, та же модель представления также должна отвечать за «подачу» представления с данными, которые могут или не могут поступить из поиска.
Чтобы привести пример кода:
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 выставлял одну Search
команду .Таким образом, привязка из вида действительно проста.
Подводя итог, 2 простых момента:
- убедитесь, что ваша логика поиска не в модели представления;пусть модель представления делегирует поиск
- , чтобы результаты поиска были частью модели представления или фактических объектов модели представления (чтобы вы могли "подавать" их для удобного просмотра)