WPF .Net6框架下, 使用 Microsoft.Xaml.Behaviors.Wpf 的Interaction.Triggers特性,实现ComboBox 在展开时,触发刷新列表内容的动作

avatar
作者
筋斗云
阅读量:0

概述

ComboBox 在WPF中是常见的控件。
一般情况下,在绑定好数据源后,其内容是固定的。
当然,你也可以实时刷新,但这将带来较高的资源消耗。
因此有个折中的办法:
只在它在展开时,自动更新列表内容。

框架环境

当前文章基于 .Net6框架,其他框架不适用。

步骤1:安装Nuget组件:Microsoft.Xaml.Behaviors.Wpf

这个是用于平替winform某个组件的WPF版本。
Nuget直接安装即可。

步骤2: 添加XAML开头

 xmlns:behaviour="http://schemas.microsoft.com/xaml/behaviors" 

引用你安装的组件。

步骤3:编辑你 ComboBox的xaml部分

<ComboBox Margin="50,0,0,0"  Name="ComboBox_ComPorts"                                        materialDesign:HintAssist.Hint="{DynamicResource DicText_Overview_RefreshComportHints}"                                        materialDesign:HintAssist.HintOpacity=".26"                                                                          ItemsSource="{Binding ComPorts}"  Height="Auto" Width="180" VerticalAlignment="Center"                                    SelectedItem="{Binding SelectedComPort, Mode=TwoWay}"                                   ToolTip="{Binding SelectedComPort}">                          <behaviour:Interaction.Triggers>                             <behaviour:EventTrigger EventName="DropDownOpened">                                 <behaviour:InvokeCommandAction Command="{Binding GetComPortsCommand}" />                             </behaviour:EventTrigger>                         </behaviour:Interaction.Triggers>                     </ComboBox> 

触发展开后,刷新列表的,就是以下代码块

						<behaviour:Interaction.Triggers>                             <behaviour:EventTrigger EventName="DropDownOpened">                                 <behaviour:InvokeCommandAction Command="{Binding GetComPortsCommand}" />                             </behaviour:EventTrigger>                         </behaviour:Interaction.Triggers> 

它通过Command的方式,绑定并触发GetComPortsCommand 的方法。
最终实现了这个刷新的动作。

其他

有关Command的实现,可以参考我其他的博客

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!