Я подталкиваю себя к тому, чтобы сделать приложения, которые я пишу проще, и я сделал несколько шагов, чтобы сделать это, но у меня осталась интересная проблема, которая совсем не чувствую, что это будет уникально для меня. Мне интересно, что я делаю неправильно.Упрощение ICommand/RelayCommand в подходе MVVM
У меня есть ViewModel, который хранит коллекцию объектов модели. Представление представляет собой ListView, который отображает все объекты в коллекции. Объекты модели имеют всю логику в них, чтобы манипулировать ими. Внутри строки ListView для каждого элемента у меня есть кнопка, и эта кнопка должна быть подключена для вызова метода на объекте модели.
Для того, чтобы это сработало, мне нужно добавить привязку команд, но в контекст данных родительского окна, который передает параметр объекта модели в строке, чтобы объект модели мог использоваться внутри ViewModel (родительского окна данных) для вызова метода на объект модели, который передается.
Это кажется действительно намного сложнее, чем должно быть. Я готов выбросить все, что я уже сделал, нет священных коров, я просто хочу, чтобы это было сделано в более простом методе, который будет легко оглянуться назад через год и выяснить, что я делаю.
Вы можете использовать привязку с RelativeSource, которая указывает родительское окно, а затем свойство DataContext.MyCommand. – Jeff
Почему ваши модели не создают привязку команды, которая вызывается непосредственно кнопкой в представлении модели? – Phil
Я тоже думал об этом, но насколько я уверен, встраивание бизнес-логики в мои модели, используя части .NET-библиотек из System.Windows (DependencyObject - так что я мог бы привязываться) и System.Windows.Input (ICommand/RoutedCommand) просто кажется неправильным иметь в модельном объекте. – Andrew