2

我有一些让我生气的 XAML 代码。首先是为未引用的值添加一个虚拟项目。

为此,我必须实现 aCollectionViewSource和 a CompositeCollection。现在我无法选择第一个组合框项目,它出现但我无法选择它,因为我设置了DisplayMemberPath在 XAML 中设置了(我猜是这样)。此外,分隔符看起来不像预期的那样。

我来给你展示:


截屏


如果我不设置 XAML DisplayMemberPath,我可以使用 Dummy Item 但绑定的项目显示不正确:

截屏

XAML:

<ComboBox x:Name="G_cb_content_zuordnung" 
          Margin="165,0,0,0" 
          Grid.Row="1" 
          SelectedIndex="0"
          VerticalAlignment="Top"
          DisplayMemberPath="PartnerID"
          HorizontalAlignment="Left" 
          Width="119">
    <ComboBox.Resources>
        <CollectionViewSource x:Key="ComboCollection" Source="{Binding Path=mySelectedItem.Stammkinder}" />
    </ComboBox.Resources>
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Content="Ohne Stammnummer" Name="NoPID" />
            <Separator />
            <CollectionContainer Collection="{Binding Source={StaticResource ComboCollection}, Mode=OneWay}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

我所需要的只是一个虚拟/占位符组合框项目,它显示在ObservableCollection<myClass>. 难道我的思维方式不对?有更聪明的解决方案吗?我在我的解决方案中遗漏了什么吗?

4

1 回答 1

3

使用第二种方法并明确定义DataTemplate项目,而不是使用DisplayMemberPath属性:

<ComboBox xmlns:o="clr-namespace:APP.GLN_Organisator.Objects">
    <ComboBox.Resources>
        <CollectionViewSource x:Key="ComboCollection"
                              Source="{Binding Path=mySelectedItem.Stammkinder}" />

        <!-- Define a DataTemplate here -->
        <DataTemplate DataType="{x:Type o:ChildPartner}">
            <TextBlock Text="{Binding PartnerID}"/>
        </DataTemplate>

    </ComboBox.Resources>
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Content="Ohne Stammnummer" Name="NoPID" />
            <Separator />
            <CollectionContainer Collection="{Binding Source={StaticResource ComboCollection}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

使用DataTemplate,您可以告诉 WPF 您希望如何显示您的项目。如果您不提供任何内容DataTemplate并且不设置DisplayMemberPath属性值,WPF 将退回到ToString()显示您的项目的简单调用。这就是为什么您看到这些类型字符串而不是您的项目的原因。

于 2018-05-03T15:29:37.410 回答