(весь этот запрос основан на предположении, что я могу создать контекстное меню в отдельном файле и прикрепить его к разным контейнерам в разных элементах управления - это предположение следует проверить)
Как определитьобъект привязки в элементе контейнера, который вызывает действие контекстного меню?
Я могу увидеть, как это сделать, посмотрев на SelectedItem объекта ListView, но я предпочитаю не знать о конкретном экземпляре ListView, например, чтобы одно и то же контекстное меню можно было присоединить к разным спискам.
Существует ли универсальное решение для определения объекта привязки, даже в разных типах контейнеров (например, необязательно ListView)?
<UserControl ...>
<UserControl.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem Header="Caption" Click="MenuItem_Click"></MenuItem>
</ContextMenu>
</UserControl.Resources>
<ListView x:Name="ListView">
<ListView.ContextMenu>
<StaticResource ResourceKey="ContextMenu" />
</ListView.ContextMenu>
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
</GridView>
</ListView.View>
</ListView>
</UserControl>
Учитывая приведенный выше элемент управления, как добраться до объекта привязки для элемента, который был нажат?Я тону в супе свойств в RoutedEventArgs.
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
var obj = ??? as MyObjType;
var name = obj.Name;
}
Кажется, это работает, как ожидалось, но жестко закодировано в экземпляр контейнера:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
var obj = (MyObjType)NodesList.SelectedItem;
MessageBox.Show(obj.Name);
}