我有在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 }
如果我有兩個項目具有相同的名稱列表中,並設置組織屬性(從視圖模型)是OrganisationId = 31的項目將從綁定引擎中調用setter,並選擇其他項目。
原因是因爲DisplayMemberPath被設置爲Name。它將Name視爲一個關鍵字,並假定它在組合框中是唯一的,但事實並非如此。
如果我拿出DisplayMemberPath它的工作,但組合框然後顯示錯誤的東西。
如果我取出DisplayMemberPath並定義ToString方法以返回OrganisationEntity中的Name屬性,則會發生同樣的情況。
如何你要用戶做區分哪些組織實體之間,他們正在選擇?這聽起來更像是一個設計問題,而不是一個wpf問題。 – Marius
當然,同意。這是一個設計問題,因爲我們數據庫中的數據有重複。我們將解決這個長期問題。我們需要在列表中包含兩個項目的原因是因爲我們數據庫中的其他錶鏈接到這些組織實體。該組合所在的彈出窗口也有其他記錄,並且需要確保選擇正確的鏈接。 – peter