Как я могу инициализировать свойство в режиме просмотра при создании нового представления?

Я предлагаю вам использовать мини-сервер для запуска таких приложений на локальном хосте (если вы не используете какой-либо встроенный сервер).

Вот что очень просто настроить и запустить:

https://www.npmjs.com/package/tiny-server
3
задан an earwig 13 July 2018 в 15:25
поделиться

2 ответа

Можете ли вы не просто разрешить экземпляр IDataService из вашего контейнера, прежде чем создавать экземпляр View2ViewModel?

Как вы это сделаете, будет зависеть от того, какой контейнер DI вы используете, но с AutoFac это будет:

    var findCredentialView = new View2();
    var dataService = Container.Resolve<IDataService>();
    var vm = new View2ViewModel(dataService);
    vm.DivisionIdnt = divisionIdnt;

    findCredentialView.DataContext = vm;

    findCredentialView.ShowDialog();

В качестве альтернативы вы можете разрешить View2ViewModel из контейнера:

    var findCredentialView = new View2();
    var vm = Container.Resolve<View2ViewModel>();
    vm.DivisionIdnt = divisionIdnt;

    findCredentialView.DataContext = vm;

    findCredentialView.ShowDialog();

, который позаботился бы о введении ctor для вас.

Очевидно, что оба эти подходы требуют, чтобы у вас есть ссылка на ваш контейнер во время выполнения, но большинство приложений / контейнеров дают вам это. Если они этого не делают, просто выставляйте свой контейнер при загрузке через службу / singleton / static, как и ваши предпочтения.

Вы также можете найти этот ответ полезным: Как обрабатывать инъекцию зависимостей в WPF / MVVM application

1
ответ дан Sam Shiles 17 August 2018 в 12:32
поделиться
  • 1
    Кажется, это то, что я ищу. Пришлось выяснить, как это сделать с моим контейнером DI, но заставил его работать. – an earwig 17 July 2018 в 13:03

Вы пытались сначала инициализировать модель просмотра, а затем передать ее в представление?

public View2(View2ViewModel vm)
{
    InitializeComponent();
    Messenger.Default.Register<NotificationMessage<int>>(this, (m) => NotificationMesageReceived(m, m.Content));
}
private void NotificationMesageReceived(NotificationMessage<int> msg, int divisionIdnt)
{
    if (msg.Notification == "SearchCred")
    {
        var vm = new View2ViewModel();
        vm.DivisionIdnt = divisionIdnt;
        var findCredentialView = new View2(vm); 
        findCredentialView.ShowDialog();
    }
}
0
ответ дан Tracy Zhou 17 August 2018 в 12:32
поделиться
  • 1
    Проблема в том, что конструктору viewmodel нужен параметр IDataService, который инжектируется внутри конструктора во время выполнения – an earwig 13 July 2018 в 16:04
Другие вопросы по тегам:

Похожие вопросы: