Конкатенация DisplayMemberPath

Я пытаюсь связать два значения со значением отображения ComboBox, но я не знаю, как это сделать.

Этот способ не работает:

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

Кто-нибудь знает, как это сделать на С#?

Ответы

Ответ 1

К сожалению, это невозможно с DisplayMemberPath. У вас есть следующие варианты:

  • Укажите DataTemplate

    <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>
    
  • Добавить свойство или поле в источник данных. Как это сделать зависит от вашего источника данных:

    Если ваше поле со списком привязано к DataTable, добавьте DataColumn и заполните его значения в цикле. Кроме того, измените свой SQL и добавьте объединенное значение в предложение SELECT.

    Если ваше поле со списком привязано к объекту инфраструктуры POCO или сущности, добавьте свойство, которое возвращает конкатенацию.

Ответ 2

Вам нужно использовать DataTemplate:

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

Ответ 3

Вы можете создать представление, объединить два поля, а затем ссылаться на имя связанного поля в свойстве DisplayMemberPath в С# после обращения к новому представлению в свойстве itemssource (и после обновления вашей модели фреймворка)