Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF ListView,带“;只读“;选择编辑_Wpf_Wpf Controls - Fatal编程技术网

WPF ListView,带“;只读“;选择编辑

WPF ListView,带“;只读“;选择编辑,wpf,wpf-controls,Wpf,Wpf Controls,我的情况是:我试图在WPF应用程序中建立一个多对多关系模型,同时编辑关系的一面。现在的情况是,我有一组属于零到多个组的用户。编辑用户时,我使用列表视图,并将选择模式设置为Many。用户所属的组在列表视图中标记为选定项 我的问题是:并非所有用户都有权修改用户的组成员身份。但是,他们应该能够查看它们。到目前为止,这还不是一个真正的问题,因为当然,在保存更改时,会有权利检查被取消。然而,我想做的是有效地禁用ListView(至少它能够修改SelectedItems),同时仍然保持其他基本功能(尤其是滚

我的情况是:我试图在WPF应用程序中建立一个多对多关系模型,同时编辑关系的一面。现在的情况是,我有一组属于零到多个组的用户。编辑用户时,我使用
列表视图
,并将
选择模式
设置为
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作为字符串的类型属性”。这正是我想要的行为。谢谢你的帮助!