Использование ValueConverter после переключателя DataContext - PullRequest
0 голосов
/ 01 декабря 2010

Я хочу попробовать небольшой пользовательский ValueConverter в классе, который после создания экземпляра (через конструктор по умолчанию, который вызывает только InitializeComponents()), получает другой DataContext, в частности, экземпляр ViewModel.

Использование StaticResource в Binding не работает вообще (дает NullReferenceException), поскольку с тех пор DataContext было изменено (больше не this).

Я пытался поставить DataContext = this; перед вызовом InitializeComponents, без изменений.Должен ли я изучить эту MarkupExtension штуковину (как описано в этой статье )?

Я также попытался создать экземпляр пользовательского Value Converter в ViewModel (текущаяDataContext), тоже не помогает.

Я могу предоставить дополнительную информацию в любое время.Заранее спасибо!

Я пытаюсь отобразить ContextMenu внутри TextBlock.ContextMenu содержит единственный MenuItem.Заголовок MenuItem может быть, например, «Настройки».Дочерние элементы (также представленные как MenuItems) указанного MenuItem происходят из Enum, следовательно, ItemsSource в MenuItem.

Теперь все отображается хорошо, но я пытаюсь создать одного из дочерних элементов (например,элемент Enum), который будет выбран по умолчанию, так как уже есть настройка по умолчанию.Дополнительную информацию можно найти в моем другом вопросе .

Редактировать :

... 
<UserControl.Resources>
  <Helpers:DisplayTypeToDefaultValueConverter x:Key="displayTypeConverter" />
</UserControl.Resources>
...

<TextBlock x:Name="InstructionLabel" 
           TextWrapping="Wrap" Text="{Binding Path=SelectedNodeText}" 
           Grid.RowSpan="1">

  <TextBlock.ContextMenu>
    <ContextMenu>
      <MenuItem Header="Settings" Name="SettingsPop" 
                DataContext="{Binding}" 
                ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}"
                IsCheckable="True"
                Click="SettingsType_Click">   

        <MenuItem.ItemContainerStyle>
          <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding}"/>
            <Setter Property="IsChecked">
              <Setter.Value>
                <Binding Converter="{StaticResource displayTypeConverter}" />
              </Setter.Value>
            </Setter>
          </Style>
        </MenuItem.ItemContainerStyle> 

     </ContextMenu>
  </TextBlock>

Я только сейчас понял, что это ужасноКонтекстное меню.В этом проблема, не так ли?

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

DataContext внутри ItemContainerStyle является членом коллекции DisplayTypeValues. Единственная вещь в XAML, которую вы опубликовали, на которую будет влиять DataContext изменения UserControl, - это текст InstructionLabel. Установка DataContext = "{Binding}", как вы делаете для MenuItem, также является избыточной, поскольку значение уже будет унаследовано от родительского ContextMenu.

Из вашего вопроса или кода неясно, что вы ожидаете от DataContext или что вы пытаетесь с ним сделать.

0 голосов
/ 13 декабря 2010

Использовано более простое решение, как выделено в моем другом связанном вопросе .
Спасибо за ваш вклад!

0 голосов
/ 01 декабря 2010

Всего несколько мыслей:

  1. Вы уверены, что не пропустили установку пути привязки в <Binding Converter="{StaticResource displayTypeConverter}" />?
  2. Вы проверяли StackTrace сгенерированного исключения и все его внутренние исключения, чтобы увидеть, было ли что-то интересное?
...