【问题标题】:DataContext of a XAML ComboBox Not WorkingXAML 组合框的 DataContext 不起作用
【发布时间】:2020-09-22 01:02:08
【问题描述】:

我在 XAML 中创建了一个 WPF 组合框:

        <ComboBox DockPanel.Dock="Top" Background="{DynamicResource Esri_BackgroundPressedBrush}" DataContext="DockpaneData" 
            Foreground="{DynamicResource Esri_TextMenuBrush}" HorizontalAlignment="Stretch" FontSize="14" VerticalAlignment="Center" Margin="5,0,5,0" IsEditable="True" Text="Jump To"
            ItemsSource="{Binding FeatureEditUpdates}">
        </ComboBox>

我设置了 ComboBox“DockpaneData”的 DataContext,在这种情况下,它是另一个名为 DockpaneViewModel.cs 的文件中的一个名为“DockpaneData”的内部类。

为什么我不能绑定到公共类属性“FeatureEditUpdates”?

如果我将它放在与文件同名的类中,它将起作用,并且不要在 ComboBox 中设置数据上下文。为什么?

我在输出窗口中遇到的错误是:

System.Windows.Data Error: 40 : BindingExpression path error: 'FeatureEditUpdates' property not found on 'object' ''String' (HashCode=-1567065443)'. BindingExpression:Path=FeatureEditUpdates; DataItem='String' (HashCode=-1567065443); target element is 'ComboBox' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')

我看到它认为数据上下文是一个字符串,这对我来说没有意义。

谢谢!

【问题讨论】:

  • Datacontext 继承自其父控件,因此您无需设置各个控件的 datacontext,根据例外情况,您的组合框的 datacontext 是字符串类型,而不是 DockPaneViewModel

标签: c# wpf xaml


【解决方案1】:

表达式

<ComboBox ... DataContext="DockpaneData"/>

将 ComboBox 的 DataContext 设置为字符串文字“DockpaneData”,您可以在错误消息中看到该字符串

在“对象”“字符串”上找不到属性

正确设置 DataContext 的一种方法是声明和使用 XAML 资源:

<Window.Resources>
    <local:DockpaneData x:Key="DockpaneData"/>
</Window.Resources>
...
<ComboBox ... DataContext="{StaticResource DockpaneData}"/>

【讨论】:

  • 为 UserControl 页面而不是 Window 页面设置它的正确方法是什么?谢谢!
  • 你的意思是&lt;UserControl.Resources&gt;而不是&lt;Window.Resources&gt;
猜你喜欢
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 2023-03-19
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多