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
相关产品推荐
相关产品推荐

