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.

Другие вопросы по тегам