基本上,我用WPF C#编写了用于串行端口的小型应用程序。
对于从ComPortComboBox中选择特定端口号的串行端口的初始设置,它应显示已选择的特定端口的正确端口设置(例如:BaudRate)。
因此,我决定在端口号更改时分配BaudRateComboBox的SelectedIndex。
因此,我试图读取所选端口的波特率,然后将波特率值与BaudRateComboBox中定义的值匹配,以使用C#的Linq查询来定位正确的索引。我知道我们有foreach方法来定位索引,但是我想学习并在C#中使用Linq作为解决方案。
请参阅代码以进一步了解。我需要在ComPort_SelectionChanged方法中添加Linq来找到与条件匹配的索引。
namespace SerialReadAndWrite
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private SerialPort m_port = new SerialPort();
public MainWindow()
{
InitializeComponent();
}
private void ComPort_DropDownOpened(object sender, EventArgs e)
{
var ports = SerialPort.GetPortNames();
ComPortComboBox.ItemsSource = ports;
}
private void ComPort_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
m_port.PortName = ComPortComboBox.SelectedItem.ToString();
//BaudRateComboBox.SelectedIndex= choose the index from BaudRateComboBox.ItemSource which matches the value of the existing settings of the port
BaudRateComboBox.IsEnabled = true;
}
private void BaudRate_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
m_port.BaudRate = Convert.ToInt32(BaudRateComboBox.SelectedItem.ToString());
}
}
}
答案 0 :(得分:0)
请注意,根据BaudRateComboBox.ItemSource
的实际类型,请确保LINQ是最佳选择,但是您可以使用Select
的两个参数来查找匹配项:
BaudRateComboBox.SelectedIndex = BaudRateComboBox.ItemSource.Select((br,n) => new { br, n }).First(brn => brn.br == m_port.BaudRate).n;
我假设您的ItemSource
是Int32
的集合以匹配BaudRate
,如果不匹配,请添加适当的转化。