#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. Если вы решили свою проблему, пожалуйста, отметьте ее как принятую для удобства пользователей, которые посетят эту тему позже.