DisplayMemberPath 连接

问题描述 投票:0回答:4

我正在尝试将两个值绑定到组合框显示值,但我不知道该怎么做。

这个方法行不通:

cboRegion.DisplayMemberPath = "idregion" + "description";

有人知道如何在 C# 中做到这一点吗?

.net wpf combobox
4个回答
81
投票

不幸的是,这对于

DisplayMemberPath
来说是不可能的。您有以下选择:

  • 指定数据模板

    <ComboBox>
      <ComboBox.ItemTemplate>
        <DataTemplate>
          <TextBlock>
            <TextBlock.Text>
              <MultiBinding StringFormat="{}{0}: {1}">
                <Binding Path="idregion"/>
                <Binding Path="description"/>
              </MultiBinding>
            </TextBlock.Text>
          </TextBlock>
        </DataTemplate>
      </ComboBox.ItemTemplate>
    </ComboBox>
    

    (如果您想了解 StringFormat 属性中的空大括号,请参阅:Binding 语法的 StringFormat 部分中的 {} 括号有何含义?

  • 将属性或字段添加到数据源。如何做到这一点取决于您的数据源:

    如果您的组合框绑定到 DataTable,请添加 DataColumn 并在循环中填充其值。或者,更改您的 SQL 并将连接值添加到您的

    SELECT
    子句中。

    如果您的组合框绑定到 POCO 或实体框架对象,请添加一个返回串联的属性。


23
投票

您需要使用

DataTemplate

<ComboBox Name="cboRegion">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <Run Text="{Binding idregion}" />
                <Run Text="{Binding description}" />
            </TextBlock>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

1
投票

您可以创建一个视图,连接两个字段,然后在引用 itemssource 属性中的新视图之后(以及更新实体框架模型之后),在 c# 中的 DisplayMemberPath 属性中引用连接的字段名称


0
投票

有时软破解是好的:)

var response = OrderOperations.GetAll();

if (response.Result.Entities.Any())
foreach (var entity in response.Result.Entities)
    entity.OrderName = "[ " + entity.Id + " ] - " + entity.OrderName;

OrdersComboBox.ItemsSource = response.Result.Entities.OrderByDescending(o => o.OrderDate).ToList();
OrdersComboBox.SelectedValuePath = "Id";
OrdersComboBox.DisplayMemberPath = "OrderName";
OrdersComboBox.SelectedIndex = 0;
© www.soinside.com 2019 - 2024. All rights reserved.