如何处理组合框中的重复项目

时间:2011-10-27 07:34:10

标签: c# .net silverlight

我在使用Silverlight中的telerik组合框时遇到了麻烦

我已经定义了这个,

<telerik:RadComboBox SelectedItem="{Binding Organisation, Mode=TwoWay}" ItemsSource="{Binding Organisations}" DisplayMemberPath="Name" />

并且SelectedItem属性绑定为这样,

[Required(ErrorMessage = "The organisation is required.")]
public OrganisationEntity Organisation
{
    get
    {
        return utilityOwnerOrganisation;
    }
    set
    {
        utilityOwnerOrganisation = value;
        RaisePropertyChanged(this, x => x.UtilityOwnerOrganisation);
    }
}

OrganisationEntity就是这样,

public class OrganisationEntity 
{
    public string Name { get; set; }
    public int OrganisationId { get; set; }
}

如果列表组织中有两个组织,如此定义

,则会出现问题
new OrganisationEntity() { Name = "Wellington City Council", OrganisationId = 34 }
new OrganisationEntity() { Name = "Wellington City Council", OrganisationId = 31 }

如果我在列表中有两个具有相同名称的项目,并将Organization属性(从viewmodel)设置为OrganisationId = 31的项目,则从绑定引擎调用setter,并选择另一个项目。

原因是DisplayMemberPath设置为Name。它将Name视为一个关键,并假设它在组合框中是唯一的,但事实并非如此。

如果我取出DisplayMemberPath它可以工作,但组合框会显示错误的东西。

如果我取出DisplayMemberPath并定义ToString方法以返回OrganisationEntity中的Name属性,则会发生同样的事情。

1 个答案:

答案 0 :(得分:1)

尝试删除DisplayMemberPath并使用DataTemplate显示您想要的内容:

<ComboBox ItemsSource="{Binding Organisations}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>