簡體   English   中英

WPF ListBox.SelectedItems作為ListBoxItem

[英]WPF ListBox.SelectedItems as ListBoxItem

有沒有辦法有一個的選擇的項目ListBoxListBoxItem事件SelectionChanged (在ListBox在WPF)?

現在,當我調用listBox.SelectedItems時, listBox.SelectedItems數據源的格式獲取項目列表。

例如,當我創建我的ListBox我將其綁定到CustomListBoxViewModel作為數據源,因此,當我調用SelectedItems我會得到一個CustomListBoxViewModel對象的列表。

謝謝!

編輯:

所選答案中給出的代碼非常適合我的用例。

另一方面,我完全理解這違反了MVVM模式。 我將使用您在xaml視圖后面的代碼中提供的代碼。

我的原始問題背后的原因是,我需要實現一個ListBox ,該ListBox內部具有一些禁用的ListBoxItems 這些項目將必須是不可選擇的。

我嘗試在ListBoxItems上使用附加屬性IsSelectable ,但效果不佳。 此附加屬性受此職位的啟發。 問題是,當我直接選擇一個禁用的項目時,附加屬性可以完美運行。 無法選擇該項目,並且該項目不在SelectedItems集合內。 但是,如果我想通過按CTRL + A來選擇所有項目,則所有ListBoxItems被選中,甚至禁用的項目也會在SelectedItems集合中找到。

無論出於什么原因,這可能是對MVVM的嚴重違反,您終生都會為之感到遺憾。

但是,邁向滅絕之路的第一步始終很容易。

這是如何做:

var listBox = (ListBox)sender;
var selectedListBoxItems = 
    listBox.SelectedItems.Cast<Object>()
    .Select(item => (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromItem(item))
    .ToList();

當一切都以眼淚結束時,別哭了。

沒錯,但很認真,在WPF中有很多充分的理由來做這種事情,但是它們遠不如WPF初學者所期望的那么普遍。 通過使C#代碼僅與數據項交互,並通過樣式和模板對XAML中的ListBoxItem進行處理,可以最好地處理幾乎所有正常情況。 一旦習慣了這種思維方式,它就會非常強大,靈活,高效且可維護。 當所有其他合理途徑均失敗時,Codebehind是您為奇數情況所采取的措施。 例如,拖放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM