我是 WPF 的新手。我有一个 StackPanel,其中包含多个组合框,其中 ItemSource(以 StackPanel 的样式设置)来自CaSupplierColumns
SQL Server 中的视图()(Visual Studio 自动创建了我ordersDataSet
从数据源面板拖动的链接)。这没问题。
当我使用CompositeCollection
以将自定义值添加到组合框之一 ( Manufacturer
) 时出现问题,所有值都正确显示并且添加的项目也出现 - 但为空白。添加的项目在组合框中显示为空白选项。
我发现的罪魁祸首是DisplayMemberPath
设置为Columns
(这是数据库视图中列标题的名称),当我DisplayMemberPath
将此组合框设置为 null 时,添加的项目确实正确显示,但组合框中的其他值显示为System.Data.DataRowView
.
如何DisplayMemberPath
在一个 CompositeCollection 中有两个不同的 s?或者也许有不同的方法来做到这一点?
这是我当前的 XAML(去掉关键部分):
<Window.Resources>
<local:OrdersDataSet x:Key="ordersDataSet" />
<CollectionViewSource x:Key="caSupplierColumnsViewSource" Source="{Binding CaSupplierColumns, Source={StaticResource ordersDataSet}}" />
</Window.Resources>
<StackPanel Name="MapFields" DataContext="{StaticResource caSupplierColumnsViewSource}">
<StackPanel.Resources>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding}" />
<Setter Property="DisplayMemberPath" Value="Columns" />
<Setter Property="SelectedValuePath" Value="Columns" />
<Setter Property="IsSynchronizedWithCurrentItem" Value="False" />
</Style>
</StackPanel.Resources>
...
<ComboBox Name="MfrPartNo" />
...
<ComboBox Name="Manufacturer">
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource ResourceKey=caSupplierColumnsViewSource}}" />
<ListBoxItem>Another option</ListBoxItem>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</StackPanel>