Это похоже на вопрос, который я задал пару дней назад. Однако теперь у меня есть лучшее понимание проблемы, поэтому я бы хотел еще раз разобраться с ней.
Я создаю приложение MVVM, которое (помимо прочего) отображает список с оповещениями для пользователя. Эти предупреждения относятся к различным рутинным задачам, которые должны выполняться периодически, и каждое предупреждение содержит гиперссылку, которая при нажатии открывает редактор и запись, необходимую для выполнения задачи, связанной с предупреждением.
Моя проблема возникает, когда я пытаюсь связать эти гиперссылки с ICommands. Все команды приложения являются объектами ICommand и отображаются в качестве свойств команды в модели представления. Поэтому обычно привязка к команде так же проста, как Command = "Foo", где Foo - это свойство команды модели представления.
Но это не сработает для моих гиперссылок. И вот почему: ListBox привязан через свойство ItemsSource к свойству коллекции в модели представления с именем Alerts. Эта коллекция состоит из объектов оповещений, которые содержат информацию, необходимую для создания оповещений и связанных с ними гиперссылок.
Однако, поскольку ListBox привязан к коллекции Alerts, его элементы имеют доступ только к этой коллекции, а - к остальной части модели представления! Другими словами, мои гиперссылки не имеют доступ к свойствам команды, с которыми они должны связываться. Command = Foo просто не работает, потому что WPF не может найти свойство Foo в коллекции Alerts, даже если модель представления имеет свойство command с этим именем.
Я могу обойти это довольно уродливым хаком, который включает использование IValueConverter для создания экземпляров ICommands, которые мне нужны. Гиперссылка привязывается к имени нужной ICommand (из объекта Alert), а IValueConverter меняет имя для нового экземпляра самой ICommand.
Я не очень доволен этим решением. Я пытался выяснить, как создать ресурсы из свойств команды модели представления, чтобы я мог связать команды гиперссылки следующим образом:
<Hyperlink Command={StaticResource Foo} />My Hyperlink</Hyperlink>
Но я не могу понять, как создать ресурс.
Буду весьма признателен за любые предложения по решению этой проблемы. Спасибо за вашу помощь!