首页 > 解决方案 > DataBinding C# ObservableCollection SerialPort 到 Combobox(SerialPort.getPortNames=> 返回字符串数组的方法)

问题描述

我需要将计算机中的可用端口列表绑定到 WPF 中的组合框。我正在使用 ObservableCollection。我做过

public class MainWindowVM
    {
      public ObservableCollection<String[]> ListOfAvaliablePorts { get; set; }

        public MainWindowVM()
        {
            ListOfAvaliablePorts = new ObservableCollection<String[]>();
            ListOfAvaliablePorts.Add(SerialPort.GetPortNames());       
        }
    } 

但是组合框 Output 上的输出是 String[] Array

我的 Xaml 代码是

     <!--#region Combobox-->
            <ComboBox
                Name="portsCombobox" Width="80" Margin="50,0,0,0" 
                ItemsSource="{Binding ListOfAvaliablePorts}">
            </ComboBox>
            <!--#endregion-->

请帮我解决问题,以便我可以得到像 COM1 COM2 COM6 COM7 COM5这样的输出

标签: c#wpfcomboboxbindingserial-port

解决方案


如果你想绑定一个字符串数组,那么它只是ObservableCollection。而且您还需要实现INotifyPropertyChanged来引发属性更改。

你可以看看我的解决方案如下:

public class MainWindowVM : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    private ObservableCollection<string> _ListOfAvaliablePorts;

    public ObservableCollection<string> ListOfAvaliablePorts
    {
        get
        {
            return _ListOfAvaliablePorts;
        }
        set
        {
            if (value != _ListOfAvaliablePorts)
            {
                _ListOfAvaliablePorts = value;
                OnPropertyChanged(nameof(ListOfAvaliablePorts));
            }
        }
    }

    public MainWindowVM()
    {
        var comPorts = SerialPort.GetPortNames();
        _ListOfAvaliablePorts = new ObservableCollection<string>(comPorts);
    }
}

推荐阅读