gpt4 book ai didi

wpf - DisplayMemberPath 不适用于直接项目?

转载 作者:行者123 更新时间:2023-12-04 10:23:47 24 4
gpt4 key购买 nike

我有一个 ListBox (或 ComboBox ,我都试过了)其中项目是通过 ListBoxItem 直接添加的( ComboBoxItem ) 元素。

数据为CultureInfo来自两个 ObjectDataProvider 的对象元素中的资源(或上面的某个地方)。 CultureInfo.GetCultureInfo调用静态方法。

总之,我想要一个ListBox/ComboBox填充了一些 CultureInfo条目。

数据绑定(bind)工作正常,但设置 DisplayMemberPathCultureInfo 之一属性(例如 DisplayName - 我想显示“English”,而不是“en-US”)什么也没有发生。
奇怪的是,如果我尝试使用 ComboBox并选择其中一项,DisplayMemberPath适用于所选值(显示在文本框中),但不适用于下拉列表。

我的问题是:我错过了什么吗?还是 DisplayMemberPath不适用于直接项目且仅在 ItemsSource绑定(bind)到一个集合(只是一个猜测)?

<ListBox x:Name="LangListBox" DisplayMemberPath="DisplayName">
<ListBox.Resources>
<ObjectDataProvider x:Key="EngCultureInfoProvider" ObjectType="{x:Type Globalization:CultureInfo}" MethodName="GetCultureInfo">
<ObjectDataProvider.MethodParameters>
<System:String>en-US</System:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="ItaCultureInfoProvider" ObjectType="{x:Type Globalization:CultureInfo}" MethodName="GetCultureInfo">
<ObjectDataProvider.MethodParameters>
<System:String>it-IT</System:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</ListBox.Resources>
<ListBoxItem Content="{Binding Source={StaticResource EngCultureInfoProvider}}"/>
<ListBoxItem Content="{Binding Source={StaticResource ItaCultureInfoProvider}}"/>
</ListBox>

ListBox

ComboBox

注意:使用 ItemTemplate 也不起作用。
...
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
...

最佳答案

当前每个 ListBoxItem 显示 ToString() 的结果CultureInfo上的方法目的。
DisplayMemberPathItemTemplate不适用于元素,因为 ListBoxItem是直接添加的,不是ListBox创建的.

添加 DisplayName在绑定(bind)路径中:

<ListBoxItem Content="{Binding Source={StaticResource EngCultureInfoProvider}, Path=DisplayName}"/>
<ListBoxItem Content="{Binding Source={StaticResource ItaCultureInfoProvider}, Path=DisplayName}"/>

或者

使用自定义 ContentTemplate 为 ListBoxItem 创建默认样式:
<ListBox x:Name="LangListBox" DisplayMemberPath="DisplayName">
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type Globalization:CultureInfo}">
<TextBlock Text="{Binding DisplayName}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Resources>
<ListBoxItem Content="{Binding Source={StaticResource EngCultureInfoProvider}}"/>
<ListBoxItem Content="{Binding Source={StaticResource ItaCultureInfoProvider}}"/>
</ListBox>

关于wpf - DisplayMemberPath 不适用于直接项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60719878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com