WPF ListView с «только для чтения» SelectedItems - PullRequest
0 голосов
/ 29 июня 2010

Вот моя ситуация: у меня есть отношение многие ко многим, которое я пытаюсь смоделировать в приложении WPF, редактируя одну сторону отношения.Ситуация у меня есть набор пользователей, которые принадлежат к нулю для многих групп.При редактировании пользователя я использую ListView с SelectionMode, установленным на Many.Группы, к которым принадлежит пользователь, помечаются как выбранные элементы в представлении списка.

Моя проблема заключается в следующем: не все пользователи имеют право изменять членство в группах пользователей.Но они должны иметь возможность просматривать их.Пока что на самом деле это не проблема, потому что, конечно же, существуют проверки прав, которые запускаются при сохранении изменений.Однако я хотел бы эффективно отключить ListView (по крайней мере, это возможность изменять SelectedItems), сохраняя при этом другие базовые функции (особенно при прокрутке, я также реализовал сортировку при нажатии на заголовки).Таким образом, пользователь не может непреднамеренно вносить изменения, на которые ему не разрешено, а затем сталкиваться с ошибкой позже, когда он собирается сохранить изменения.

В настоящее время я просто полностью отключаю ListView, еслипользователь не имеет достаточных прав.Но, как я уже упоминал, он эффективно отключает все другие функции (прокрутка и т. Д.) И, таким образом, является неоптимальным с точки зрения пользовательского опыта.Количество элементов в списке (в настоящее время несколько сотен) требует, чтобы прокрутка была необходима для просмотра всех элементов.

Я пытался перехватывать различные события мыши (без учета альтернативного доступа к входу на данный момент) и отмечатьсобытия как обрабатываются, когда пользователь нажимает на ListViewItem и помечает событие как обработанное, но ListView по-прежнему изменяет выделение.

Я только что обработал событие SelectionChanged и просто восстановил предыдущее состояние,но это кажется немного излишним (но, возможно, это самое простое - самое простое - решение).

У кого-нибудь есть мысли о том, как добиться такого поведения?

1 Ответ

7 голосов
/ 29 июня 2010

Вы можете отключить ListViewItems, но оставить сам ListView включенным.Таким образом, полосы прокрутки будут работать, но пользователю будет ясно, что они не могут взаимодействовать с элементами в списке.Вы можете отключить элементы, используя ItemContainerStyle следующим образом:

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