0

我想在一个类中尝试一个小的自定义ValueConverter,在实例化之后(通过仅调用的默认构造函数InitializeComponents()),给出另一个DataContext,特别是 ViewModel 的实例。

在aStaticResource中使用Binding根本不起作用(产生 a NullReferenceException),因为DataContext从那时起已经改变了(this不再是)。

我试过在打电话DataContext = this;之前放InitializeComponents,没有改变。我应该研究这个MarkupExtension小发明(如本文所述)吗?

我还尝试Value Converter在 ViewModel (当前DataContext)中创建自定义实例,但也无济于事。

我可以随时提供更多详细信息。先感谢您 !

我正在尝试在 TextBlock 中显示 ContextMenu。ContextMenu 包含一个唯一的 MenuItem。例如,MenuItem 的标题可以是“设置”。所述 MenuItem 的子项(也呈现为 MenuItems)源自枚举,因此是 MenuItem 上的 ItemsSource。

现在一切都很好地显示了,但我正试图让其中一个孩子(例如枚举的成员)被默认选择,因为已经有一个默认设置。更多背景信息可以在我的另一个问题中找到。

编辑

... 
<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>

我现在才意识到这是可怕的 ContextMenu。这就是问题所在,不是吗?

4

3 回答 3

1

ItemContainerStyle 内的 DataContext 是 DisplayTypeValues 集合的成员。您发布的 XAML 中唯一会受到 UserControl 更改的 DataContext 影响的是 InstructionLabel 的文本。在 MenuItem 上设置 DataContext="{Binding}" 也是多余的,因为该值已经从父 ContextMenu 继承。

从您的问题或代码中不清楚您对 DataContext 的期望或您试图用它做什么。

于 2010-12-01T16:35:37.417 回答
0

只是几个想法:

  1. 你确定你没有错过设置绑定路径<Binding Converter="{StaticResource displayTypeConverter}" />吗?
  2. 您是否检查了抛出异常的 StackTrace 以及所有 InnerExceptions 以查看是否有一些有趣的东西?
于 2010-12-01T15:58:56.373 回答
0

使用了一个更简单的解决方案,正如我在其他相关问题中所强调的那样。
谢谢您的意见 !

于 2010-12-13T15:35:58.007 回答