Нужно создавать VM в отдельном потоке. Пробовал два варианта:
Этот вариант тормозит главный поток
public class MainVm : VmBase { public ButtonsVm ButtonsVm { get; private set; } public MainVm() { Init(); } private async void Init() { var uiContext = TaskScheduler.FromCurrentSynchronizationContext(); ButtonsVm = await Task.Factory.StartNew(() => new ButtonsVm(), CancellationToken.None, TaskCreationOptions.None, uiContext); } }С этим вылетает exception
public class MainVm : VmBase { public ButtonsVm ButtonsVm { get; private set; } public MainVm() { Init(); } private async void Init() { await Task.Run(() => ButtonsVm = new ButtonsVm()); } }
Additional information: Must create DependencySource on same Thread as the DependencyObject.
UPDATE: ButtonsVm в себе содержит еще около 15 VM, и обращается к модели которая работает с Entity, поэтому и хочется вынести ее создание в отдельный поток чтобы первое подключение к базе не подтормаживало программу.
VladD, вижу вы человек опытный вWPF, не могли бы подсказать хороший пример реализации сервиса создания дочерних и диалоговых окон в контексте паттернаMVVM? P.S. Могу создать отдельный вопрос под это дело ) – sp7 May 21 '16 at 11:03VladD, хотелось что-то вродеmyWindowsSrv.ShowWindow(childVM);т.е. вызвал сервис создания окон, передал емуVMи сервис на основе этойVMотобразил нужнуюView. – sp7 May 21 '16 at 11:14VladD, ссылка на вопрос http://ru.stackoverflow.com/questions/525998/%d0%a1%d0%b5%d1%80%d0%b2%d0%b8%d1%81-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bc%d0%be%d0%b4%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d1%85-%d0%b8-%d0%bd%d0%b5%d0%bc%d0%be%d0%b4%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d1%85-%d0%be%d0%ba%d0%be%d0%bd-%d0%b2-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%b5-%d0%bf%d0%b0%d1%82%d1%82%d0%b5%d1%80%d0%bd%d0%b0-mvvm – sp7 May 21 '16 at 12:04