使用数据模板导致组合框的“选择项”显示错误

本文关键字:选择 选择项 错误 显示 数据 组合 | 更新日期: 2023-09-27 18:04:00

我有一个问题的组合框。打开组合框时显示这些项。当我选择一个项目时,组合框正在关闭,组合框显示Model.Person而不是Name, Vorname

  1. 我该如何解决?
  2. 如何实现自动建议?

我有一个带数据模板的组合框。

<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" />