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>
Другие вопросы по тегам