2
在WinRT App(C#)中,我有List<Item> items
,它綁定到ListBox
。
Class Item
有2個欄位:string Name
和bool IsSelected
。如你所知,我想將IsSelected
字段綁定到ListBoxItem的IsSelected屬性。
在ListBox中以多種選擇模式綁定ListBoxItem的IsSelected屬性
爲什麼我需要這個?爲什麼我沒有使用我的ListBox
的SelectedItems
財產?
- 在剛裝入
ListBox
,我已經有一些項目,它必須是IsSelected = true
- 我不想再創建一個集合來存儲所有選定的項目。
我在找什麼?
我在尋找完美的解決方案,就像在WPF:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
但我們都知道,WinRT中不支持綁定的setter方法在所有。
我還要檢查nice post在Filip Skakun博客 - 這是一個解決方案,但我需要我自己寫的一些BindingBuilder/BindingHelper
的。
而現在,我知道解決我的問題雙向的:
- 綁定的
ListBox
SelectedItems
財產和存放物品的另一個集合。 - 我不喜歡這種方式 - 做它像Filip Skakun - 如果我找不到我使用這個。
在理想的情況下,我想爲此使用原生解決方案,或者也許有人已經爲我的情況編寫/測試了嵌套BindingBuilder
- 這也會有幫助。
出色答卷。謝謝。 – jimpanzer
由於'Item'是'ListBox'上的ItemSource屬性的類型,因此可以刪除if語句以使控件更通用。其實我不確定爲什麼那張支票就在那裏。在我看來,檢查'element'是否是一個'ListBoxItem'會更有意義。 – Trisped
@Trisped呃,沒有。 「ItemsSource」屬性的類型是「object」(或WPF中的「IEnumerable」)。您通常會分配一個仍然可以包含任何類型的集合,而不僅僅是應用程序定義的「Item」類。另一方面,在ListBox中,元素類型始終是'ListBoxItem',除非您也重寫'GetContainerForItemOverride'並返回其他類型。我建議開始閱讀這裏:[WPF ItemsControl](http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.aspx)。 – Clemens