Wpf ContextMenu MenuItem Привязка заголовка - PullRequest
0 голосов
/ 11 мая 2018

У меня 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, которые я вижу в окне вывода, которое может 't не обнаружил CurrentLang.CmenuItemUnLockUser в CaseObject, поэтому проблема связана с текстом данных ...

Как я могу указать правильный текст данных?

Спасибо!

1 Ответ

0 голосов
/ 11 мая 2018

Если свойство 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>
...