如何读取wpf comboboxitem中的路径并写入绑定的路径
我试图编一个例子来说明我的问题 我的组合框有一个对象列表作为itemssource。在我的例子中,它是一个人员列表。在组合框中,我想显示此人的名字和姓氏。但是我想在房屋对象的“所有者”属性中保存该人的姓氏 我的猜测是,我将SelectedValue绑定到我的属性,将SelectedValuePath绑定到comboboxitem中的属性名称 我已经在谷歌上搜索并尝试查看其他版本,但没有任何效果 如果使用SelectedItem而不是SelectedValue进行相同的绑定,则至少会在属性中写入“tostring”函数get的值。遗憾的是,这个解决方案不适合我程序的其余部分,因为我不想覆盖“ToString” Xaml:如何读取wpf comboboxitem中的路径并写入绑定的路径,wpf,combobox,binding,Wpf,Combobox,Binding,我试图编一个例子来说明我的问题 我的组合框有一个对象列表作为itemssource。在我的例子中,它是一个人员列表。在组合框中,我想显示此人的名字和姓氏。但是我想在房屋对象的“所有者”属性中保存该人的姓氏 我的猜测是,我将SelectedValue绑定到我的属性,将SelectedValuePath绑定到comboboxitem中的属性名称 我已经在谷歌上搜索并尝试查看其他版本,但没有任何效果 如果使用SelectedItem而不是SelectedValue进行相同的绑定,则至少会在属性中写入“
<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>