【发布时间】:2020-11-20 22:58:37
【问题描述】:
我有一个 SQL 表,其中包含用于填充 WPF 组合框的列“AreaCode”和“Description”。但是当我在组合框上选择一个项目时,它会在组合框文本上显示 System.Data.DataRowView。下面是组合框的 xaml。
<ComboBox x:Name="AreaComboBox" Grid.Row="3" Grid.Column="1" Width="300" Margin="5" IsEditable="True" ItemsSource="{Binding}" SelectedValuePath="Description">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="Area" Text="{Binding AreaCode}"/>
<TextBlock Text=" "/>
<TextBlock x:Name="Description" Text="{Binding Description}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
使用简单的 c# 代码填充组合框: AreaComboBox.ItemsSource = dataSet.Area.AsDataView();
我注意到,如果我将 IsEditable 更改为 False,这不是问题,只有当它为 true 时才会出现问题。
有人可以帮我弄清楚为什么它返回“System.Data.DataRowView”而不是我选择的项目的文本吗? 如果有解决方案会更好:)
我非常乐意提供更多详细信息。
【问题讨论】:
-
这个答案可能会帮助您找到解决方案:stackoverflow.com/a/3672098/9365244
-
您将 itemsource 绑定两次?在代码隐藏和 xaml 中?
-
@Bandook 不幸的是,这是在多次尝试使其工作之后,包括尝试不同的绑定方式。这一切都有相同的结果:(。或者你认为这可能是问题吗?
-
我没有对此进行测试,但我会猜测一下。通过执行“ItemsSource={Binding}”,您将 itemssource 绑定到视图本身的数据上下文,并且在您的代码隐藏中,您将绑定到“dataSet.Area.AsDataView()”的返回集合。当 IsEditable 更改时,哪个绑定优先更改。这可能是错误的,但我首先想消除双重绑定场景 - 我会通过首先删除 xaml.xml 中的绑定来测试您的代码。如果这不起作用,请将其放回原处并删除代码隐藏绑定。但更重要的是,这不是对 ItemsSource 的良好绑定。
-
我的请求 - 请向我们提供以下信息 - (1) 您何时/何地调用“dataSet.Area.AsDataView()”,即显示您在代码中设置 itemssource 的方法-后面和(2)这个“dataSet.Area.AsDataView()”的返回类型是什么。
标签: c# wpf combobox visual-studio-2019