我想允许用户选择串口的波特率。我创建了一个与串口波特率绑定的文本框,如下所示,它可以工作。
<TextBox x:Name="tbbaudRate" Text="{Binding SerialPort.BaudRate}" />
我的问题是,有效波特率的集合是有限的。有效波特率为 { 75, 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 }。我想将文本框更改为列出有效波特率值的组合框。
这是我所做的。
<ComboBox x:Name="tbbaudRate" Text="{Binding SerialPort.BaudRate}" >
<ComboBoxItem Content="75"/>
<ComboBoxItem Content="110"/>
<ComboBoxItem Content="300"/>
<ComboBoxItem Content="1200"/>
<ComboBoxItem Content="2400"/>
<ComboBoxItem Content="4800"/>
<ComboBoxItem Content="9600"/>
<ComboBoxItem Content="19200"/>
<ComboBoxItem Content="38400"/>
<ComboBoxItem Content="57600"/>
<ComboBoxItem Content="115200"/>
</ComboBox>
虽然这可行,但我几乎没有问题。
当我第一次加载窗口时,未选择波特率的默认值(9600)。
这看起来不那么优雅。实现这一目标的最佳方法是什么?
作为参考,这是我的串口类。也像上面的代码一样丑陋。我使用 resharper 自动生成 notifypropertychange 代码。
class SerialComm : INotifyPropertyChanged
{
private int[] ValidBaudRate = new[] { 75, 110, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 }; //Dont know how to use this
private int[] ValidDataBits = new[] { 5, 6, 7, 8, 9 }; //Dont know how to use this
private SerialPort _serialPort;
public SerialComm()
{
_serialPort = new SerialPort();
}
public SerialPort SerialPort
{
get { return _serialPort; }
set
{
_serialPort = value;
OnPropertyChanged("SerialPort");
SerialPort.GetPortNames();
}
}
#region Autogenerate by resharper
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}