我在使用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属性,则会发生同样的事情。
答案 0 :(得分:1)
尝试删除DisplayMemberPath并使用DataTemplate显示您想要的内容:
<ComboBox ItemsSource="{Binding Organisations}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>