Что я рекомендовал бы это слом «только обновление по кликам» идеи, и просто использовать привязки и уведомлений для этого (если по какой-то причине вы не думаете, что будет так много событий Connect/Disconnect, это замедлит вашу систему). Простейшей версией этого является свойство зависимости.
Обеспечить IObservableList<Port>
свойство как свойства зависимостей ваших ViewModel, как это:
/// <summary>
/// Gets or sets...
/// </summary>
public IObservableList<Port> Ports
{
get { return (IObservableList<Port>)GetValue(PortsProperty); }
set { SetValue(PortsProperty, value); }
}
public static readonly DependencyProperty PortsProperty = DependencyProperty.Register("Ports", typeof(IObservableList<Port>), typeof(MyViewModelClass), new PropertyMetadata(new ObservableList<Port>));
Теперь вы можете добавлять/удалять элементы в/из этого списка при каждом подключении или отсоединении устройства, просто не заменить список , Это заставит список отправить ListChangedEvent
для каждого действия в списке, а ComboBox (или любой другой связанный пользовательский интерфейс) будет реагировать на эти события.
Это должно быть достаточно для вас, поскольку это приведет к обновлению пользовательского интерфейса ComboBox всякий раз, когда происходит событие.
Обрабатывать событие DropDownOpened и вызывать 'GetPortsNames' в обработчике для обновления элементов. С MVVM вы бы сделали то же самое с каким-то «Command», а затем обновили данные в ViewModel соответственно. –