Prism View назначается родительской странице ViewModel внутри XCT tabview
Исторически я использовал элемент управления вкладкой syncfusion как часть моего макета в своих приложениях, однако с недавним введением Xamarin Community Toolkit (xct) и с LazyView, находящимся в последнем предварительном выпуске nuget, я хочу использовать это и посмотреть, на что похож этот опыт.
Я выполняю регистрацию в файле app.xaml.cs как обычно, как обычно:
ViewModelLocationProvider.Register<HomeView, HomeViewViewModel>();
Когда я нахожусь на своей странице содержимого, я добавляю представление к элементу вкладки:
<xct:TabViewItem Icon="{AppThemeBinding Light={local:ImageResource App.Assets.Icons.Black.home_100px.png}, Dark={local:ImageResource App.Assets.Icons.White.home_100px.png}}" Text="Home">
<xct:TabViewItem.Content>
<xct:LazyView x:TypeArguments="dressmakerViews:HomeView" />
</xct:TabViewItem.Content>
</xct:TabViewItem>
На этом этапе представление добавляется, как ожидалось, но ему назначается модель просмотра страницы содержимого вместо модели просмотра, которую я зарегистрировал для представления.
Очевидно, что устранение неполадок здесь заключалось в использовании LazyView вне представления вкладок и назначении ожидаемой модели представления.
Мой вопрос здесь - помочь мне понять, почему это происходит и как решить проблему.
В качестве обходного пути, чтобы заставить приложение работать, мне пришлось переместить код в модель представления для страницы с контентом, но здесь все кажется неправильным, и я хочу иметь возможность решить эту проблему.
1 ответ
По какой-то причине TabView заменяет любое предыдущее значение BindingContext, присвоенное TabItems, на значение, унаследованное его родителем.
В качестве обходного пути вы можете добавить слушателя в
BindingContextChanged
событие для каждого
TabViewItem.Content
и переназначьте его ожидаемой ViewModel.