c# - WPF 组合框集合容器显示的文本

标签 c# wpf data-binding

我使用 CompositeCollection & CollectionContainer 为组合框提供默认值,但问题是实际数据显示为类的完整路径。

有没有办法在类中选择一个字段来表示呢?因此,它将显示一个字符串属性,而不是 StMaryChurchAttendance.Models.Groups

这是 xaml:

<StackPanel Orientation="Horizontal" DataContext="{Binding SelectionBarDataContext}" Name="SearchPanel">
    <Label>Group : </Label>
    <ComboBox  Name="SelectionBarGroupsComboBox">
        <ComboBox.Resources>
            <CompositeCollection x:Key="CompositeCollection">
                <CollectionContainer Collection="{Binding Source={x:Reference SearchPanel}, Path=DataContext.Groups }" />
            </CompositeCollection>
        </ComboBox.Resources>
        <ComboBox.ItemsSource>
            <CompositeCollection>
                <ComboBoxItem Name="AllGroupItem" IsSelected="True">All Groups</ComboBoxItem>
                <CollectionContainer  Collection="{Binding Source={StaticResource CompositeCollection}}" />
            </CompositeCollection>
        </ComboBox.ItemsSource>
    </ComboBox>
</StackPanel>

Example of problem

最佳答案

通常,这是可行的:

<ComboBox  
    DisplayMemberPath="WhateverPropertyYouWant"
    Name="SelectionBarGroupsComboBox">

WhateverPropertyYouWant 替换为您要显示的属性 -- StMaryChurchAttendance.Models.Group 的一些属性。不要使用绑定(bind)。只需在引号之间键入属性名称。

但是你已经混合了不同的东西,所以这次它不会起作用。这是另一个选项:为您的 Group 类创建一个隐式 DataTemplate,它只在 ComboBox 中可见。 ComboBox 将使用它来显示 Groups,而不会影响任何其他内容。

<ComboBox  
    Name="SelectionBarGroupsComboBox">
<ComboBox.ItemTemplate>
                        <DataTemplate 
        xmlns:models="clr-namespace:StMaryChurchAttendance.Models"
        DataType="models:Group">
                            <TextBlock Text="{Binding Name}" />
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
    <ComboBox.Resources>
        <CompositeCollection x:Key="CompositeCollection">
            <CollectionContainer Collection="{Binding Source={x:Reference SearchPanel}, Path=DataContext.Groups}" />
        </CompositeCollection>


    </ComboBox.Resources>
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ComboBoxItem Name="AllGroupItem" IsSelected="True">All Groups</ComboBoxItem>
            <CollectionContainer  Collection="{Binding Source={StaticResource CompositeCollection}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

关于c# - WPF 组合框集合容器显示的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40293376/

相关文章:

c# - 读取net core api 3.1中的AuthorizationFilterContext

c# - 在 WPF 中将 Image.Source 绑定(bind)到字符串?

c# - 对用户单击已选择的ListViewItem,MVVM使用react

c# - 无法处理 C# COM 对象

c# - 使用 "is"关键字和 "null"关键字 c# 7.0

asp.net-mvc-3 - 如何将 knockoutjs 值绑定(bind)到 MVC 操作链接 (id)

wpf 简单 mvvm 绑定(bind)不工作

wpf - 绑定(bind)到另一个控件的 DataContext 的属性

c# - 使用 OwnerDrawAll 时 Windows 窗体中的 TreeView 错误

WPF mvvm通过命令发送TreeViewItem的绑定(bind)元素