使用数据模板导致组合框的“选择项”显示错误
本文关键字:选择 选择项 错误 显示 数据 组合 | 更新日期: 2023-09-27 18:04:00
我有一个问题的组合框。打开组合框时显示这些项。当我选择一个项目时,组合框正在关闭,组合框显示Model.Person
而不是Name, Vorname
。
- 我该如何解决?
- 如何实现自动建议?
我有一个带数据模板的组合框。
<ComboBox ItemTemplate="{StaticResource PersonenComboboxTemplate}"
x:Name="Person1CheckboxName" Text="Choose Person" IsEditable="True"
ItemsSource="{Binding Path=Personenliste}"
SelectionChanged="Person1CheckboxName_SelectionChanged" />
<DataTemplate x:Key="PersonenComboboxTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}"/>
<TextBlock Text=", "/>
<TextBlock Text="{Binding Path=Vorname}"/>
</StackPanel>
</DataTemplate>
我使用mvvm模式。数据绑定在ViewModel中实现。
public ObservableCollection<Person> Personenliste
{
get
{
ObservableCollection<Person> persColl =
new ObservableCollection<Person>();
List<Person> personen =
databaseConnection.getAllPersonsRAW().ToList<Person>();
// sort by Vorname and Nachname
personen.Sort(new PersonComparer());
foreach (Person p in personen)
{
persColl.Add(p);
}
return persColl;
}
}
一个Person
有名(Vorname
)和姓(Name
)。由ADO生成。. NET实体数据模型)
[EdmEntityTypeAttribute(NamespaceName="dataModel", Name="Person")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Person : EntityObject
{
#region Factory-Methode
/// <summary>
/// Erstellt ein neues Person-Objekt.
/// </summary>
/// <param name="personID">Anfangswert der Eigenschaft PersonID.</param>
public static Person CreatePerson(global::System.Int64 personID)
{
Person person = new Person();
person.PersonID = personID;
return person;
}
#endregion
...
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[DataMemberAttribute()]
public global::System.String Name
{
get
{
return _Name;
}
set
{
OnNameChanging(value);
ReportPropertyChanging("Name");
_Name = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("Name");
OnNameChanged();
}
}
...
}
在Person类(或partial类)中重写ToString()以返回Name + " " + Vorname
:
public partial class Person
{
public override ToString()
{
return string.Format("{0} {1}", Name, Vorname);
}
}
编辑:由于ToString()不是对更改通知作出反应的东西,正如H.B.在注释中指出的那样,您可以使用第二种方法:
// In PersonPartial.cs
public partial class Person
{
public string DisplayText
{
get { return string.Format("{0} {1}", Name, Vorname); }
}
partial void OnNameChanged()
{
OnPropertyChanged("DisplayText");
}
partial void OnVornameChanged()
{
OnPropertyChanged("DisplayText");
}
}
<ComboBox ... DisplayMemberPath="DisplayText" />