WPF MVVM - 单击时更新下拉列表

Zeu*_*s82 3 c# wpf combobox drop-down-menu

我有一个下拉列表(ComboBox),显示计算机上可用的所有COM端口.现在,当您连接和断开设备时,端口会进出.

出于性能原因,我不想继续通话System.IO.Ports.SerialPort.GetPortNames(),而只是在用户点击Combobox时调用它?这可能吗?是否有MVVM方法来解决这个问题?

Mik*_*chs 9

使用InvokeCommandAction.

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Run Code Online (Sandbox Code Playgroud)

DropDownOpenedCommand是ICommandViewModel上的属性.

<ComboBox>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="DropDownOpened">
            <i:InvokeCommandAction Command="{Binding DropDownOpenedCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

编辑:显然DropDownOpened不是SelectionChanged,正如Patrice评论的那样.

  • 我喜欢这个——必须出去获取 NuGet 包 `System.Windows.Interactivity v4.0 for WPF` 才能工作 (2认同)

The*_*fen 0

您可以使用 MVVMLight 的 EventToCommand 之类的东西来完成此操作。基本上,单击组合的事件将挂钩到 MVVM 命令绑定,然后触发调用 GetPortNames() 的方法。

以下是一些替代方案:

MVVM Light:在 XAML 中添加 EventToCommand 而无需 Blend,更简单的方法或片段?(检查已接受的答案)

http://www.danharman.net/2011/08/05/binding-wpf-events-to-mvvm-viewmodel-commands/(棱镜)