У меня есть пользовательский компонент, который в основном представляет собой текстовое поле с прикрепленной кнопкой. Кнопка должна выполнять действие над текстовым полем; например, нажатие кнопки может заполнить текстовое поле некоторой случайной строкой.
Текстовые поля привязаны к свойствам в ViewModel. В основном это выглядит так:
Каков наилучший способ настроить команду, общую для компонента?
Что я сделал до сих пор, так это то, что у меня есть один общий RelayCommand
в моей ViewModel, который ожидает параметр. Каждая кнопка имеет свою команду, установленную для этой единственной команды, и я использую свойство CommandParameter
, чтобы добавить некоторую информацию о том, о каком компоненте текстового поля я на самом деле говорю. Затем ViewModel использует эту информацию, чтобы найти правильное свойство и изменить его значение (обновление текстовых полей через привязку).
Хотя это работает нормально, мне не нравится, что мне приходится вручную вставлять информацию о соответствующем текстовом поле или контексте. В идеале я хотел бы, чтобы команда выполнялась в контекстной области, которая уже знает, о каком текстовом поле или связанном свойстве идет речь. Есть ли способ сделать это?
Еще одна проблема, с которой я столкнулся, заключается в том, что я хочу привязать действие кнопки к ключевой команде. Поэтому, когда я выделяю текстовое поле и нажимаю сочетание клавиш, я хочу, чтобы оно вело себя так, как если бы я нажал кнопку правильно, т. е. выполнил команду и передал правильную контекстную информацию. Моей альтернативой было бы поместить это в код программной части и, по сути, извлечь параметр команды из текущего фокуса, но я бы предпочел более чистое решение.
Есть ли хороший способ заставить это работать с MVVM?