Prism View 被分配到 XCT tabview 中的父页面 ViewModel

Prism View is being assigned parent page ViewModel inside XCT tabview

我一直在使用 syncfusion 选项卡控件作为我应用程序布局的一部分,但是,随着最近引入的 Xamarin 社区工具包 (xct) 和最新预发布 nuget 中的 LazyView 我想用这个,看看体验如何。

我像往常一样在 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>

此时,视图已按预期添加,但分配给了内容页面的视图模型,而不是我为该视图注册的视图模型。

这里明显的故障排除是在 tabview 之外使用 LazyView 并分配了预期的视图模型。

我的问题是帮助我理解为什么会这样以及如何解决这个问题。

作为让应用程序正常工作的解决方法,我不得不将代码移出到内容页面的视图模型中,但这里的一切感觉都不对,我想能够解决。

出于某种原因,TabView 在更改时会用自己的 BindingContext 替换之前分配给 TabItems 的任何 BindingContext 值。

作为变通方法,您可以为每个 TabViewItem.Content 添加一个 BindingContextChanged 事件的侦听器,并重新分配给它预期的 ViewModel。

更新:

您还可以用 ContentView

包裹 TabView 的内容
        <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>
                <ContentView>
                    <xct:LazyView x:TypeArguments="dressmakerViews:HomeView" />
                </ContentView>
            </xct:TabViewItem.Content>
        </xct:TabViewItem>

这样,LazyView 的 BindingContext 就不会被覆盖。