Исправление: SettingsList устанавливается , но звучит так, как будто он не установлен так быстро, как вам хотелось бы.
Похоже, что вы просите об этом: когда вы создаете экземпляр AllViewModel, вы ожидаете, что свойство SettingsList будет полностью заполнено до того, как конструктор AllViewModel вернется.
Хотя это можно сделать, есть много причин, по которым это, вероятно, не очень хорошая идея и сомнительное требование к дизайну. Выполнение сетевого вызова в виде синхронного вызова блокирует вызывающий поток (обычно ваш поток пользовательского интерфейса) на время, необходимое для завершения сетевого запроса, которое может составлять от 20 до 30 секунд. Вы действительно хотите, чтобы пользовательский интерфейс приложения зависал на 30 секунд? Ваши пользователи могут предположить, что ваша программа потерпела крах или «заблокирована», и закроет программу, даже не подозревая, что она не умерла.
Тем не менее, вот как это сделать: вы можете преобразовать асинхронный вызов в синхронный вызов, используя что-то вроде этого (не проверено) с помощью параллельной библиотеки задач .NET 4.0 (TPL):
public AllViewModel()
{
var task = Task<List<Settings>>.Factory.StartNew(() =>
client.SupplierListWithSettings((s,e) =>
{
if (e.Error == null && e.Result != null)
{
var list = new List<Settings>();
foreach (VCareSupplierDto obj in e.Result)
{
list.Add(obj);
}
task.SetResult(list);
}
}));
this.SettingsList = task.Result;
}
Опять же, это не очень хорошая идея. Для вас было бы гораздо лучше посмотреть, какие части вашего кода предполагают, что свойство SettingsList заполняется сразу после создания объекта, и изменить эти зависимости, чтобы сделать что-то вроде прослушивания изменений в свойстве SettingsList и выполнять их работу как как только SettingsList фактически заполняется асинхронно.
Попытайтесь идти с асинхронным потоком вместо того, чтобы бороться с ним.