我有下面的wpf窗口:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ports="clr-namespace:System.IO.Ports;assembly=System"
Title="MainWindow"
SizeToContent="WidthAndHeight">
<Window.Resources>
<ObjectDataProvider x:Key="portNames"
MethodName="GetPortNames"
ObjectType="{x:Type ports:SerialPort}" />
</Window.Resources>
<ComboBox Name="cbox" ItemsSource="{Binding Source={StaticResource portNames}}" SelectionChanged="ComboBox_SelectionChanged" />
</Window>
我使用ObjectDataProvider填充Com Port组合框。 但我不知道如何填充其他组合框。 使用C#函数:
private void LoadBaudRates()
{
cboxBaudRate.DataContext = new int[] { 9600, 14400, 19200, 38400, 57600, 115200, 128000 };
cboxBaudRate.SelectedIndex = 0;
}
private void LoadParity()
{
cboxParity.DataContext = Enum.GetValues(typeof(Parity));
}
private void LoadFlowControl()
{
cboxFlowControl.DataContext = Enum.GetValues(typeof(Handshake));
}
private void LoadCOMPorts()
{
var comPorts = SerialPort.GetPortNames();
//cboxCOMPorts.DataContext = comPorts;
this.cboxCOMPorts.DataContext = comPorts;
}
答案 0 :(得分:0)
如果您想在XAML中填充其他ComboBoxes
,那么对于Enum
,您也可以像创建COM端口一样创建ObjectDataProvider
:
<ObjectDataProvider x:Key="HandshakeValues" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="ports:Handshake" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ComboBox ItemsSource="{Binding Source={StaticResource HandshakeValues}}"/>
对于int
数组,您可以执行以下操作:
<ComboBox>
<ComboBox.ItemsSource>
<x:Array Type="{x:Type sys:Int32}">
<sys:Int32>9600</sys:Int32>
<sys:Int32>14400</sys:Int32>
<sys:Int32>19200</sys:Int32>
<sys:Int32>38400</sys:Int32>
<sys:Int32>57600</sys:Int32>
<sys:Int32>115200</sys:Int32>
<sys:Int32>128000</sys:Int32>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
其中sys
为xmlns:sys="clr-namespace:System;assembly=mscorlib"