以下是情況:我有一個對象列表,每個對象都以一個ID號引用。我試圖在基於對象的ID號碼一個列表視圖的列設置值:綁定 - 爲ListView列動態選擇數據
<ListView Name="Listview1"
Itemsource="{Binding ObjectList}">
<ListView.View>
<GridView>
<GridViewColumn Header="Header1" DisplayMemberBinding="{Binding subObject.property}"/>
<GridViewColumn Header="Header2" DisplayMemberBinding="{Binding PropertyOfAnItemInAList"/>
</GridView>
</ListView.View>
</ListView>
鏈表類是視圖模型中的屬性,並且證明一個ObservableCollection到ListView進行處理。 Header1和Header2綁定到名爲「ObjectList」的ObservableCollection中的項目內的屬性。
這一切都適用於Header1。問題是Header2需要從ObservableCollection的每個元素中的列表中選擇一個項目,並根據ObjectList中被引用項目的另一個屬性來顯示它。
那麼我該如何做到這一點?
我已經成功地得到它的工作通過設置變量中的鏈表類的對象稱爲「currentSelection」,然後把它設置在通過鏈表類,從的ItemSource綁定迭代產生的ListView:
public ObservableCollection<theObject> ObjectList {
get {
foreach (theObject obj in sourceCollection) {
obj.CurrentID = MyID;
}
return new ObservableCollection<theObject>sourceCollection // <-- secondary question: Is this the best way to send an observableCollection to a View???
}
}
但是,這種感覺有點像黑客而不是最佳實踐,那麼還有另一種更好的方式來完成同樣的事情嗎?
編輯:
這裏的內部鏈表類對象的一個片斷,我現在擁有它。
public class ObjectInObjectList {
/* constructor and various properties snipped to save space */
private subObject subObj;
public int CurrentID {get; set;}
public SubObject {
get { return subObject; } // etc...
}
private SortedList<int,int> valuesIWantInSecondColumn
Public int PropertyOfAnItemInAList {
return valuesIWantInSecondColumn[currentID];
}
我不知道我理解你的問題。你只是尋找最好的方法來將MyID放入Header1頭部的列中? –
我重讀了它,現在認爲您試圖將「Header2」列綁定到不同的屬性,具體取決於在另一個控件中選擇了哪個項目,並且您通過使用具有返回特定屬性的開關(CurrentID)語句的另一個屬性來完成此操作案件。這是否準確?你可以顯示theObject的相關代碼嗎? –
李 - 這是非常正確的。我將在編輯中添加相關代碼以解決問題。 –