Используйте обе руки (и все десять пальцев).
Чтобы максимизировать скорость печати, вам нужно использовать противоположный мизинец для shift / ctrl и т. Д., И вы хотите свести к минимуму количество времени, которое вы должны «вернуть» в исходное положение. Мое самое большое увеличение в наборе текста при кодировании было в том, чтобы по-настоящему выучить сочетания клавиш в моей IDE, поскольку это устранило относительно медленный процесс использования мыши.
Если вам нужно грязное решение, нарушающее MVVM, установите для кнопки Tag = "{Binding}" и обработайте событие Click. В обработчике событий вызовите команду в модели ViewModel.
Ok, then what about modifying your data item class so that it has a property referencing to the whole model view?
If your ItemsSource is of type ObservableCollection
then modify DataItem type like this:
public class DataItem
{
public BusinessObject Value { get; set; }
private ModelView modelView;
public ModelView ModelView
{
get
{
return modelView;
}
}
public DataItem(ModelView modelView)
{
this.modelView = modelView;
}
}
Используйте приведенную ниже привязку для команды вашей кнопки:
{Binding DataContext.CommandName,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type MyUserControl}}}
Это укажет ему найти ваш UserControl и использовать его DataContext.
RelativeSource работает, но я не думаю Правильно позволять элементам управления перемещаться по свойствам друг друга. Странно, что кнопка, размещенная внутри представления элемента, что-то делает с внешним источником данных, а не с привязанным элементом. Возможно, вам потребуется пересмотреть структуру программного кода.