带有“readonly”SelectedItems的WPF ListView

时间:2010-06-29 00:33:40

标签: wpf wpf-controls

这是我的情况:我正在尝试在WPF应用程序中建模的多对多关系,同时编辑关系的一方。情况是我有一组属于零到多组的用户。在修改用户时,我使用ListView并将SelectionMode设置为Many。用户所属的组在列表视图中标记为选定项目。

我的问题是:并非所有用户都有权修改用户的组成员身份。但是,他们应该能够查看它们。到目前为止,这并不是一个真正的问题,因为当然,保存更改时会有权利检查。然而,我想要做的是有效地禁用ListView(至少它能够修改SelectedItems),同时仍然保持其他基本功能(滚动,尤其是,我还在单击标题时实现了排序)。这样,用户不会无意中进行他们不允许的更改,然后在他们去保存更改时遇到错误。

目前,如果用户没有足够的权利,我只是完全禁用ListView。但是,正如我所提到的,它有效地禁用了所有其他功能(滚动等),因此从用户体验的角度来看是次优的。列表中的项目数(目前为几百个)需要滚动才能查看所有项目。

我尝试拦截各种鼠标事件(暂时忽略备用输入访问),并在用户单击ListViewItem并将事件标记为已处理时将事件标记为已处理,但ListView仍然修改了选择。

我只是处理SelectionChanged事件而只是恢复以前的状态,但这似乎有点过分(但是,它可能是最简单易读的解决方案)。

有人对如何实现这种行为有任何想法吗?

1 个答案:

答案 0 :(得分:7)

您可以禁用ListViewItems但启用ListView本身。这样滚动条就可以工作,但用户很清楚他们无法与列表中的项目进行交互。您可以使用ItemContainerStyle禁用项目,如下所示:

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