如何读取wpf comboboxitem中的路径并写入绑定的路径

如何读取wpf comboboxitem中的路径并写入绑定的路径,wpf,combobox,binding,Wpf,Combobox,Binding,我试图编一个例子来说明我的问题 我的组合框有一个对象列表作为itemssource。在我的例子中,它是一个人员列表。在组合框中,我想显示此人的名字和姓氏。但是我想在房屋对象的“所有者”属性中保存该人的姓氏 我的猜测是,我将SelectedValue绑定到我的属性,将SelectedValuePath绑定到comboboxitem中的属性名称 我已经在谷歌上搜索并尝试查看其他版本,但没有任何效果 如果使用SelectedItem而不是SelectedValue进行相同的绑定,则至少会在属性中写入“

我试图编一个例子来说明我的问题

我的组合框有一个对象列表作为itemssource。在我的例子中,它是一个人员列表。在组合框中,我想显示此人的名字和姓氏。但是我想在房屋对象的“所有者”属性中保存该人的姓氏

我的猜测是,我将SelectedValue绑定到我的属性,将SelectedValuePath绑定到comboboxitem中的属性名称

我已经在谷歌上搜索并尝试查看其他版本,但没有任何效果

如果使用SelectedItem而不是SelectedValue进行相同的绑定,则至少会在属性中写入“tostring”函数get的值。遗憾的是,这个解决方案不适合我程序的其余部分,因为我不想覆盖“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#

使用System.Collections.Generic;
使用System.Windows;
使用制度;
名称空间多列组合框
{  
公共部分类Window1:Window
{
私有列表_PersonList=新列表();
公共列表个人列表
{
获取{return\u PersonList;}
设置{u PersonList=value;}
}
私人住宅_CurrentHouse=新住宅{Owner=“Green”,Number=“11”};
酒店
{
获取{return\u CurrentHouse;}
}
公共窗口1()
{                        
初始化组件();
添加(新人物{FirstName=“Peter”,LastName=“Smith”});
添加(新的人名{FirstName=“John”,LastName=“Meyer”});
添加(新人物{FirstName=“Fritz”,LastName=“Green”});
}
私有无效打印按钮\单击(对象发送者,路由目标e)
{            
MessageBox.Show(CurrentHouse.Owner+“:”+CurrentHouse.Number);
}       
}
公屋
{ 
公共字符串所有者{get;set;}
公共字符串编号{get;set;}
}
公共阶层人士
{ 
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
}
也许有人有个主意


Christian

如果我理解您的问题,您希望在组合框中获取当前选定人员的姓氏,并将其值设置为CurrentHouse.Owner属性。如果是这样,请回顾以下内容,看看是否有意义。具体来说,请查看组合框的
SelectedValue
SelectedValuePath
属性的设置

代码隐藏

public partial class MultiColumnCombobox : Window
{
    public List<Person> PersonList { get; set; }

    public House CurrentHouse { get; set; }

    public MultiColumnCombobox()
    {
        InitializeComponent();

        PersonList = new List<Person>
                         {
                             new Person
                                 {
                                     FirstName = "Peter",
                                     LastName = "Smith"
                                 },
                             new Person
                                 {
                                     FirstName = "John",
                                     LastName = "Meyer"
                                 },
                             new Person
                                 {
                                     FirstName = "Fritz",
                                     LastName = "Green"
                                 }
                         };

        CurrentHouse = new House
                           {
                               Owner = "Green",
                               Number = "11"
                           };

        this.DataContext = this;

        ShowCurrentHouseInfo();
    }

    private void OnComboBoxChanged( object sender, SelectionChangedEventArgs e )
    {
        ShowCurrentHouseInfo();
    }

    private void ShowCurrentHouseInfo()
    {
        MyTextBlock.Text = string.Format(
            "CurrentHouse.Owner: {0} : CurrentHouse.Number: {1}",
            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; }
}
公共部分类多列组合框:窗口
{
公共列表个人列表{get;set;}
公共房屋当前房屋{get;set;}
公共多列组合框()
{
初始化组件();
PersonList=新列表
{
新人
{
FirstName=“彼得”,
LastName=“史密斯”
},
新人
{
FirstName=“约翰”,
LastName=“Meyer”
},
新人
{
FirstName=“Fritz”,
LastName=“绿色”
}
};
当前房屋=新房屋
{
所有者=“绿色”,
Number=“11”
};
this.DataContext=this;
ShowCurrentHouseInfo();
}
私有void OnComboxChanged(对象发送者,选择ChangedEventArgs e)
{
ShowCurrentHouseInfo();
}
私有void ShowCurrentHouseInfo()
{
MyTextBlock.Text=string.Format(
“CurrentHouse.Owner:{0}:CurrentHouse.Number:{1}”,
CurrentHouse.Owner,CurrentHouse.Number);
}
}
公屋
{
公共字符串所有者{get;set;}
公共字符串编号{get;set;}
}
公共阶层人士
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
XAML

<StackPanel>
    <ComboBox
        Margin="10"
        Name="ComboBox1"
        VerticalAlignment="Top"        
        SelectedValue="{Binding CurrentHouse.Owner}"
        SelectedValuePath="LastName"
        SelectionChanged="OnComboBoxChanged"
        ItemsSource="{Binding PersonList}">
        <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>

    <TextBlock x:Name="MyTextBlock" Margin="10" />

</StackPanel>

<StackPanel>
    <ComboBox
        Margin="10"
        Name="ComboBox1"
        VerticalAlignment="Top"        
        SelectedValue="{Binding CurrentHouse.Owner}"
        SelectedValuePath="LastName"
        SelectionChanged="OnComboBoxChanged"
        ItemsSource="{Binding PersonList}">
        <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>

    <TextBlock x:Name="MyTextBlock" Margin="10" />

</StackPanel>