You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI ListView拖拽重排时单选模式出现多选异常问题

WinUI ListView 拖拽重排时的选中项异常问题

当WinUI的ListView设置SelectionMode="Single",同时开启AllowDrop和CanReorderItems进行拖拽重排时,会出现额外项被选中的情况,导致同时存在两个选中项。对应的XAML代码如下:

<ListView
    AllowDrop="True" 
    SelectionMode="Single"
    CanReorderItems="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Index, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <TextBlock Margin="5 0 0 0" Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <TextBlock Margin="5 0 0 0" Text="{Binding LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

实现方式分析

你当前的基础配置逻辑上符合WinUI官方文档中拖拽重排的要求:

  • CanReorderItems="True" 开启项重排能力
  • AllowDrop="True" 允许接收拖拽操作
  • SelectionMode="Single" 限制单选

出现双选中项的情况更倾向于WinUI框架本身的Bug,而非你的实现错误。这类UI控件在拖拽交互时的选中状态同步逻辑如果处理不当,就会出现选中状态未正确更新的情况。

如果需要临时规避这个问题,可以尝试以下方案:

  • 在拖拽开始/结束时手动同步选中状态:监听DragItemsStarting和DragItemsCompleted事件,在事件处理中强制将SelectedItem设置为当前拖拽的项,清空其他选中状态
  • 自定义ListView的选中样式,确保视觉上仅显示一个选中项(但无法解决后台选中状态异常的问题)

内容的提问来源于stack exchange,提问作者tinmac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:14:58