Вместо использования ref
здесь вы должны использовать наблюдаемую коллекцию, например ObservableCollection<T>
. List<string>
уже передается по ссылке:)
Сначала измените тип clientDiscovery.OtherInstances
на ObservableCollection<string>
, затем также измените тип параметра конструктора на ObservableCollection<string>
. Удалите все ref
s, они вам не нужны.
Теперь, перепишите ManageConnections
под эту подпись (Вам понадобится using System.Collections.Specialized
):
private void ManageConnections(object sender, NotifyCollectionChangedEventArgs e) {
}
Здесь , вы проверите e.NewItems
, чтобы увидеть, какие элементы были добавлены в список instanceAddresses
, и добавите каждый из них в другой список:
foreach (var item in e.NewItems) {
Channel channel = new Channel(item, ChannelCredentials.Insecure);
var client = new ConfigurationDirectoryService.ConfigurationDirectoryServiceClient(channel);
Instances.Add(client);
}
Возможно, вы захотите что-то сделать, если там удалены предметы также. Если вы хотите справиться с этим, используйте e.OldItems
. Это удаленные элементы.
Теперь вместо вызова ManageConnections
вы делаете:
instancesToAdd.CollectionChanged += ManageConnections;
Обратите внимание, что это не будет обрабатывать начальные элементы в списке (только последующие изменения будет добавлено), поэтому вы можете обрабатывать начальные элементы сразу после строки выше.