Получить содержимое текстового блока в combobox.itemtemplate

Мне удалось поместить другую строковую дату в ComboBox, используя элементы TextBlock с привязкой данных, и затем я хотел бы получить текст выбранного элемента в моем ComboBox, вот мой код WPF:

<ComboBox ItemsSource="{Binding ListProgram, ElementName=Window}" x:Name="date">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Name="test" Text="{Binding Date}"></TextBlock>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Я попробовал это, но ничего не отображалось:

Console.WriteLine(date.Text);

Я также попробовал это, и это все еще не работает:

Console.WriteLine(test.Text);

Большое спасибо, французский начинающий программист.

1 ответ

Решение

date это ComboBox так что это естественно для date.ToString() возвращать System.Windows.Controls.ComboBox,

Вы хотите получить значение выбранного элемента даты, который не является самим элементом управления.

Во-первых, вы можете опустить DataTemplate, strings быть превращенным в TextBoxes автоматически. Просто укажите DisplayMemberPath а также SelectedValuePath ("Date" в вашем случае, но вы можете выбрать разные свойства, конечно), а WPF позаботится обо всем остальном.

  • DisplayMemberPath сообщает ComboBox, какое свойство элемента использовать для отображения элемента.
  • SelectedValuePath сообщает ComboBox, какое свойство использовать для SelectedValue
<ComboBox ItemsSource="{Binding ListProgram, ElementName=Window}"
    DisplayMemberPath="Date" SelectedValuePath="Date" x:Name="date">
</ComboBox>

В своем коде вы можете получить выбранный элемент (или его значение) с помощью:

date.SelectedValue // will return the "Date" property of the selected Item
date.SelectedItem  // will return the item itself
date.Text          // will return the string it is displaying
Другие вопросы по тегам