gpt4 book ai didi

c# - 使用 MVVM 自动更新 WPF 中的 Combobox 内容

转载 作者:行者123 更新时间:2023-12-03 10:32:37 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2017 社区版/.NET Framework 4.6.1/WPF。顺便提一句。我使用 MVVM。

我的目标是在 中显示所有可用的串行端口组合框 .我已经实现了这一点,但现在我想让组合框在打开 Dropdowmenu 或连接新设备时自动更新。因此,我需要一些属性来制作 Binding给我的ViewModel .

在 MSDN 上,我找到了 Combobox.DroppedDown-Property,这对我来说听起来不错,但我无法使用,DroppedDown 未找到...(是 System.Windows.Forms 正确的引用吗?)。

你发现我的错误还是你有更好的解决方案?

谢谢!

<UserControl x:Class="HC_SR04_MPU6050.View.SerialView_MPU_6050"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:HC_SR04_MPU6050.View"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>

<Label Grid.Row="0" Content="MPU-6050" HorizontalAlignment="Center"/>
<Label Grid.Row="0" Grid.Column="3" Content="Y-ROT[°]" HorizontalAlignment="Center"/>
<Button Command="{Binding Connect_Clicked}" Grid.Row="1" Grid.Column="0" Content="Connect" Height="20" Width="60" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="6" ToolTip="Opens/Connects the selected COM-PORT"/>
<Button Command="{Binding Measure_Clicked}" Grid.Row="1" Grid.Column="1" Content="MEASURE" Height="20" Width="60" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="6" ToolTip="Starts the Measurement routine"/>
<Button Command="{Binding Stop_Clicked}" Grid.Row="1" Grid.Column="2" Content="STOP" Height="20" Width="60" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="6" ToolTip="Stops the communication/ Closes/Disconnects the selected COM-PORT"/>
<Label Content="{Binding Rotation.Y_Rotation}" Grid.Row="1" Grid.Column="3" Height="25" Width="50" Margin="6" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="1" BorderBrush="Black" ToolTip="Output from Arduino/HC-SR04" VerticalContentAlignment="Center" FontSize="11"/>

<ComboBox Grid.Column="4" Grid.Row="1" Width="62" Height="25" Margin="6" Text="{Binding Rotation.Port_Name}" ItemsSource="{Binding Rotation.AvailablePorts}"/>
</Grid>
</UserControl>

最佳答案

您还可以查看交互触发器是否可以帮助您。

只需在您的用户控件打开标记中添加这样的内容:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

然后在你的组合框标签里面放:
<i.Interaction.Triggers>
<i:EventTrigger EventName="DropDownOpened">
<i:InvokeCommandAction Command="{Binding UpdateComnListCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>

这样,每次打开下拉菜单时,您都会收到对 UpdateCommListCommand 的调用。

您可能会遇到一些棘手的刷新问题。我不确定在实际显示打开的组合框之前会触发列表更新。

关于c# - 使用 MVVM 自动更新 WPF 中的 Combobox 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50817084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com