这是我的情况:我正在尝试在WPF应用程序中建模的多对多关系,同时编辑关系的一方。情况是我有一组属于零到多组的用户。在修改用户时,我使用ListView
并将SelectionMode
设置为Many
。用户所属的组在列表视图中标记为选定项目。
我的问题是:并非所有用户都有权修改用户的组成员身份。但是,他们应该能够查看它们。到目前为止,这并不是一个真正的问题,因为当然,保存更改时会有权利检查。然而,我想要做的是有效地禁用ListView(至少它能够修改SelectedItems),同时仍然保持其他基本功能(滚动,尤其是,我还在单击标题时实现了排序)。这样,用户不会无意中进行他们不允许的更改,然后在他们去保存更改时遇到错误。
目前,如果用户没有足够的权利,我只是完全禁用ListView。但是,正如我所提到的,它有效地禁用了所有其他功能(滚动等),因此从用户体验的角度来看是次优的。列表中的项目数(目前为几百个)需要滚动才能查看所有项目。
我尝试拦截各种鼠标事件(暂时忽略备用输入访问),并在用户单击ListViewItem并将事件标记为已处理时将事件标记为已处理,但ListView仍然修改了选择。
我只是处理SelectionChanged
事件而只是恢复以前的状态,但这似乎有点过分(但是,它可能是最简单易读的解决方案)。
有人对如何实现这种行为有任何想法吗?
答案 0 :(得分:7)
您可以禁用ListViewItems但启用ListView本身。这样滚动条就可以工作,但用户很清楚他们无法与列表中的项目进行交互。您可以使用ItemContainerStyle禁用项目,如下所示:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</ListView.ItemContainerStyle>