Я попытался создать пример, чтобы показать мою проблему.
Мой комбинированный список содержит список объектов в качестве источника. В моем примере это список людей. В поле со списком я хочу показать имя и фамилию человека. Но я хочу сохранить фамилию человека в свойстве "владелец" дома-объекта.
Я предположил, что я связал SelectedValue со своим свойством, а SelectedValuePath - с именем свойства в комбинированном элементе.
Я уже гуглил и пробовал просматривать другие версии, но ничего не получалось.
Если я использую SelectedItem вместо SelectedValue с той же привязкой, то по крайней мере значение функции get tostring записывается в свойстве. К сожалению, это решение не вписывается в остальную часть моей программы, потому что я не хочу переопределять «ToString».
Xaml:
<Window x:Class="MultiColumnCombobox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
x:Name="window">
<Grid>
<ComboBox Height="23"
Margin="72,12,86,0"
Name="ComboBox1"
VerticalAlignment="Top"
SelectedValue="{Binding CurrentHouse.Owner, ElementName=window, Mode=TwoWay}"
SelectedValuePath="LastName"
ItemsSource="{Binding PersonList, ElementName=window, Mode=Default}">
<ComboBox.ItemTemplate>
<DataTemplate>
<WrapPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=FirstName}"
Padding="10,0,0,0" />
<TextBlock Text="{Binding Path=LastName}"
Padding="10,0,0,0" />
</WrapPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button Height="23"
Click="PrintButton_Click"
HorizontalAlignment="Left"
Margin="12,0,0,9"
Name="PrintButton"
VerticalAlignment="Bottom"
Width="75">Print</Button>
</Grid>
C #
using System.Collections.Generic;
using System.Windows;
using System;
namespace MultiColumnCombobox
{
public partial class Window1 : Window
{
private List<Person> _PersonList = new List<Person>();
public List<Person> PersonList
{
get { return _PersonList; }
set { _PersonList = value; }
}
private House _CurrentHouse = new House { Owner = "Green", Number = "11" };
public House CurrentHouse
{
get { return _CurrentHouse; }
}
public Window1()
{
InitializeComponent();
PersonList.Add(new Person {FirstName = "Peter", LastName = "Smith"});
PersonList.Add(new Person {FirstName = "John", LastName = "Meyer"});
PersonList.Add(new Person {FirstName = "Fritz", LastName = "Green"});
}
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(CurrentHouse.Owner + ":" + CurrentHouse.Number);
}
}
public class House
{
public string Owner { get; set; }
public string Number { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Может быть, у кого-то есть идея,
Christian