Wpf ContextMenu MenuItem Привязка заголовка
У меня есть ContextMenu, определенный в элементе управления таким образом...
<Controls:MetroWindow.Resources>
<ContextMenu x:Key="RowContextMenu">
<MenuItem Header="{Binding CurrentLang.CmenuItemUnLockUser}"/>
</ContextMenu>
CurrentLang.CmenuItemUnLockUser является строкой.
DataContext определяется в xaml (и работает...):
<Controls:MetroWindow.DataContext>
<admin:AdminViewModel/>
</Controls:MetroWindow.DataContext>
BlockedUserContextMenu используется в DataGrid и определяется как:
<DataGrid x:Name="DgridCases"
ItemsSource="{Binding CasesCollection"
...>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="ContextMenu" Value="{StaticResource RowContextMenu}" />
</Style>
</DataGrid.RowStyle>
CasesCollection - это ObservableCollection объектов CaseObject, я вижу в окне вывода, что не удается найти CurrentLang.CmenuItemUnLockUser в CaseObject, поэтому проблема связана с текстом данных...
Как я могу указать правильный текст данных?
Спасибо!
1 ответ
Если CurrentLang
свойство определяется в AdminViewModel
класс, вы не можете привязать к нему непосредственно из DataGridRow
, Это потому что DataContext
из DataGridRow
это CaseObject
для этого конкретного ряда.
Что вы могли бы сделать, это связать Tag
собственность DataGridRow
к AdminViewModel
используя {RelativeSource}
связывание:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Tag" Value="{Binding DataContext, RelativeSource={RelativeSource AncestorType=Window}}" />
<Setter Property="ContextMenu" Value="{StaticResource RowContextMenu}" />
</Style>
</DataGrid.RowStyle>
... а затем привязать к CurrentLang
из AdminViewModel
с использованием PlacementTarget
собственность ContextMenu
:
<ContextMenu x:Key="RowContextMenu">
<MenuItem Header="{Binding PlacementTarget.Tag.CurrentLang.CmenuItemUnLockUser,
RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
</ContextMenu>