Как реализовать WPF ViewModel с PRISM INavigationAware, созданным как ресурс в XAML - PullRequest
0 голосов
/ 09 января 2020

Я попытался реализовать интерфейс INavigationAware в моей ViewModel и создал экземпляр ViewModel как ресурс в XAML, объясненный здесь https://blog.rsuter.com/recommendations-best-practices-implementing-mvvm-xaml-net-applications/ как в этом примере:

<UserControl x:Class="My.Namespace.MySampleView" ...> 
    <UserControl.Resources> 
        <viewModels:MySampleViewModel x:Key="ViewModel" /> 
    </UserControl.Resources> 
    <Grid DataContext="{StaticResource ViewModel}"> 
        ... 
    </Grid> 
</UserControl>

Но с использованием этой реализации Методы INavigationAware в ViewModel не вызываются при переходе к представлению или из него.
Одним из решений является установка DataContext для представления (UserControl) в Code-Behind.

Какая лучшая практика здесь?

1 Ответ

0 голосов
/ 09 января 2020

Методы из INavigationAware вызываются, когда вы переходите к модели вида, т.е.

  • вы определяете регион (например, ContentControl),
  • зарегистрируйте представление для навигации с помощью IContainerRegistry
  • , а затем используйте IRegionManager для перемещения по области в представлении.

Пример:

<ContentControl prism:RegionManager.RegionName="MyRegion"/>

containerRegistry.RegisterForNavigation<MyView, MyViewModel>();

regionManager.RequestNavigate( "MyRegion", "MyView" );

... и теперь будет вызываться MyViewModel.OnNavigatedTo (учитывая, MyViewModel реализует INavigationAware) ...

В качестве примечания, некоторые из "лучших практик" связаны действительно ужасно.

...