0

我有以下 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;
        }
4

1 回答 1

0

如果您想ComboBoxes在 XAML 中填充其他内容,那么Enum您也可以创建ObjectDataProvider,就像您对 COM 端口所做的那样:

<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"

于 2013-08-20T12:26:13.210 回答