WPF ListView,带“;只读“;选择编辑
我的情况是:我试图在WPF应用程序中建立一个多对多关系模型,同时编辑关系的一面。现在的情况是,我有一组属于零到多个组的用户。编辑用户时,我使用WPF ListView,带“;只读“;选择编辑,wpf,wpf-controls,Wpf,Wpf Controls,我的情况是:我试图在WPF应用程序中建立一个多对多关系模型,同时编辑关系的一面。现在的情况是,我有一组属于零到多个组的用户。编辑用户时,我使用列表视图,并将选择模式设置为Many。用户所属的组在列表视图中标记为选定项 我的问题是:并非所有用户都有权修改用户的组成员身份。但是,他们应该能够查看它们。到目前为止,这还不是一个真正的问题,因为当然,在保存更改时,会有权利检查被取消。然而,我想做的是有效地禁用ListView(至少它能够修改SelectedItems),同时仍然保持其他基本功能(尤其是滚
列表视图
,并将选择模式
设置为Many
。用户所属的组在列表视图中标记为选定项
我的问题是:并非所有用户都有权修改用户的组成员身份。但是,他们应该能够查看它们。到目前为止,这还不是一个真正的问题,因为当然,在保存更改时,会有权利检查被取消。然而,我想做的是有效地禁用ListView(至少它能够修改SelectedItems),同时仍然保持其他基本功能(尤其是滚动,我还实现了单击标题时的排序)。这样,用户就不会无意中进行不允许的更改,然后在以后保存更改时遇到错误
目前,如果用户没有足够的权限,我只是完全禁用ListView。但是,正如我所提到的,它有效地禁用了所有其他功能(滚动等),因此从用户体验的角度来看是次优的。列表中的项目数(目前为几百个)需要滚动才能查看所有项目
我尝试截取各种鼠标事件(暂时不考虑备用输入访问),并在用户单击ListViewItem时将事件标记为已处理,并将事件标记为已处理,但ListView仍然修改了选择
我曾经想过只处理SelectionChanged
事件并恢复以前的状态,但这似乎有点过分(但是,这可能是最简单的-读取最简单-解决方案)
有人想过如何实现此行为吗?您可以禁用ListViewItems,但保持ListView本身处于启用状态。这样滚动条就可以工作了,但用户很清楚,滚动条无法与列表中的项目交互。您可以使用ItemContainerStyle禁用项目,如下所示:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</ListView.ItemContainerStyle>
该TargetType是否需要读取TargetType=“{x:Type ListViewItem}”
?@Rob:设置Type类型的属性(例如Style.TargetType)时,您只需传入XAML名称,解析器就会将其转换。请参阅Perfect中的“支持Typename作为字符串的类型属性”。这正是我想要的行为。谢谢你的帮助!