0

我一直在使用 syncfusion 选项卡控件作为我的应用程序布局的一部分,但是,最近引入了 Xamarin 社区工具包 (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>

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

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

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

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

4

1 回答 1

1

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

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

更新:

你也可以用一个包装 TabView 的内容ContentView

        <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 就不会被覆盖。

于 2021-03-17T02:47:33.803 回答