2010-06-29 33 views
0

這是我的情況:我有一個多對多的關係,我試圖在WPF應用程序中建模,同時編輯關係的一側。情況是我有一組用戶屬於零到多個組。在編輯用戶時,我使用的ListViewSelectionMode設置爲Many。用戶所屬的組在列表視圖中被標記爲選定的項目。WPF ListView與「只讀」SelectedItems

我的問題是:並非所有用戶都有權修改用戶的組成員資格。但是,他們應該能夠查看它們。到目前爲止,這不是一個真正的問題,因爲當然,保存更改時會啓動權利檢查。然而,我想要做的是有效地禁用ListView(至少它能夠修改SelectedItems),同時仍然保持其他基本功能(滾動,特別是,我還實現了在單擊標題時執行排序)。通過這種方式,用戶不會無意中進行不允許的更改,並且稍後會在保存更改時遇到錯誤。

目前,我只是完全禁用ListView,如果用戶沒有足夠的權利。但是,正如我所提到的,它實際上禁用了所有其他功能(滾動等),因此從用戶體驗角度來看並不理想。列表中的項目數量(當前爲數百)需要滾動才能查看所有項目。

我試着攔截各種鼠標事件(暫時不考慮交替輸入訪問),並將事件標記爲當用戶單擊ListViewItem並將事件標記爲已處理時處理,但ListView仍然修改了選擇。

我雖然只是處理SelectionChanged事件,只是恢復以前的狀態,但這似乎有點矯枉過正(但它可能是最簡單的 - 最簡單的解決方案)。

任何人有任何想法如何完成這種行爲?

回答

7

您可以禁用ListViewItems,但保持啓用ListView本身。這樣滾動條可以工作,但用戶很清楚他們不能與列表中的項目交互。您可以使用ItemContainerStyle禁用項目,如下所示:

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="IsEnabled" Value="False"/> 
    </Style> 
</ListView.ItemContainerStyle> 
+0

該TargetType是否需要讀取'TargetType =「{x:Type ListViewItem}」'? – 2010-06-29 17:12:04

+0

@Rob:設置類型爲Type的屬性時,如Style.TargetType,只需傳入XAML名稱,解析器就會將其轉換。請參閱http://msdn.microsoft.com/en-us/library/ms753322.aspx中的「支持Typename-as-String的類型屬性」 – Quartermeister 2010-06-29 17:48:05

+0

完美。這給我正在尋找的確切行爲。謝謝您的幫助! – 2010-06-30 16:00:28