Windows Template Studio MVVMLight доступ к ViewModel со страницы сведений

#mvvm-light #uwp-xaml #windows-template-studio

#mvvm-light #uwp-xaml #windows-template-studio

Вопрос:

Я использую Windows Template Studio версии V3.0 для создания приложения UWP с использованием MVVMLight, которое реализует главную страницу / подробную страницу. Я уверен, что собираюсь пнуть себя, но я не могу понять, как получить доступ к ViewModel со страницы сведений. Мне нужно получить доступ к свойству в модели представления, чтобы установить видимость некоторых элементов XAML.

В предыдущих версиях WTS я мог использовать Локатор для доступа к ViewModel следующим образом:

 <TextBlock
    Margin="8"
    Text="{x:Bind MasterMenuItem.Name , Mode=OneWay}"
    Style="{StaticResource BodyTextBlockStyle}"
    Visibility="{Binding Source={StaticResource Locator}, Path=DriverDetailsViewModel.EditMode, Converter={StaticResource InverseBoolToVisibilityConverter}}" />
  

В версии V3 WTS реализация локатора изменилась и, похоже, не доступна как статический ресурс?

Комментарии:

1. Я предположил, что вам нужно определить EditMode свойство в вашем классе модели, вместо объявления его в классе ViewModel. Затем вы могли бы напрямую привязаться к нему на странице сведений.

2. Привет, Ксавье Се — я вижу, как это будет работать. Однако я думаю, что это нарушило бы архитектуру моего приложения, поскольку мой класс модели генерируется из схемы базы данных (EntityFramework), и мне пришлось бы затем «внедрить» это свойство.

Ответ №1:

Как я и подозревал, после более детального изучения кода WTS я понял, что могу получить доступ к ViewModelLocator из исходного кода XAML. Мне просто нужно было добавить следующее в мой код detailsview, лежащий в основе:

 private DriverDetailsViewModel ViewModel
{
    get { return ViewModelLocator.Current.DriverDetailsViewModel; }
}
  

Тогда работает следующий XAML

 Visibility="{x:Bind ViewModel.IsEditMode, Mode=OneWay, Converter={StaticResource InverseBoolToVisibilityConverter}}"
  

Комментарии:

1. Если вы решили свою проблему, пожалуйста, отметьте ее как принятую для удобства пользователей, которые посетят эту тему позже.