Да, тебе просто нужно подняться на один уровень. Сначала я попробую привязку с ElementName
и прибегну к RelativeSource
только при необходимости. Например, я бы предпочел это:
<DataGrid x:Name="_grid">
...
<Button Command="{Binding DataContext.RemoveItem, ElementName=_grid}"/>
...
</DataGrid>
Тем не менее, компилятор XAML может сворачивать свои ручки в узлах, когда речь идет об именах элементов и области видимости в элементах управления, поэтому вам может потребоваться использовать RelativeSource
:
<DataGrid x:Name="_grid">
...
<Button Command="{Binding DataContext.RemoveItem,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type DataGrid}}
}"/>
...
</DataGrid>
Вам нужно искать только до тех пор, пока контекст данных не станет вашей моделью представления. Вы можете искать UserControl
, если хотите - не уверены, что это действительно имеет значение. Оба являются довольно хрупкими связями, поэтому я предпочитаю подход ElementName
.