【问题标题】:Nested tabs views are not binding to separate ViewModel嵌套选项卡视图未绑定到单独的 ViewModel
【发布时间】:2019-10-03 10:31:47
【问题描述】:

我想将 viewmodel 绑定到 xamarin prism 框架中的嵌套选项卡视图

我创建了 4 个主页(A、B、C、D)作为主选项卡,在第一个选项卡(A)内我创建了另外两个选项卡(A1、A2)。但是嵌套选项卡的数据没有绑定。甚至视图模型意见(A1,A2)没有命中

MenuPage.xml

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage  xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.Views.MenuPage"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"

             prism:ViewModelLocator.AutowireViewModel="True" 
              xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
             xmlns:views="clr-namespace:MyApp.Views"

                BarBackgroundColor="White"
             android:TabbedPage.ToolbarPlacement="Bottom"
             NavigationPage.HasNavigationBar="True">

    <TabbedPage.Children>
        <views:A Title="A" Icon="abc.png" />
        <views:B Title="B" Icon="abc.png" />
        <views:C Title="C" Icon="abc.png" />
        <views:D Title="D" Icon="abc.png"/>
    </TabbedPage.Children>
</TabbedPage>

我的页面 A 是这样的

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:views="clr-namespace:MyApp.Views"
             x:Class="MyApp.Views.A">
    <!--Pages can be added as references or inline-->
    <TabbedPage.Children>
    <views:A1 Title="A1" />
    <views:A2 Title="A2" />

        </TabbedPage.Children>
</TabbedPage>

我有 A1 和 A2 的单独视图模型。

因此,如果我直接将 A1 绑定到主导航页面,它将正常工作并呈现数据。但是如果我喜欢上面的视图模型,A1 不会击中构造函数,并且除了静态数据之外没有任何内容显示。我是标签页的新手导航。感谢任何帮助。这是我正在尝试实现的视图

【问题讨论】:

  • 您有什么样的要求?为什么需要嵌套 TabbedPages!?
  • @G.hakim 我将图像添加到我的问题中我想要实现的目标..
  • 我不认为这些是嵌套的标签视图
  • @G.hakim 你对如何实现这个有什么建议吗
  • 您可以在网格中创建上述内容,并可以在单击时将内容视图添加到网格

标签: xamarin mvvm xamarin.forms prism tabbedpage


【解决方案1】:

我发现我们应该在页面的 XAML 中添加 AutowireViewModel 来加载我们想要的视图模型:

xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"

一般情况下,我们使用containerRegistry.RegisterForNavigation&lt;&gt;(); 将自定义视图模型绑定到某个视图。但是您在根标签页中放置了一个子标签页。这导致嵌套视图丢失了到相应视图模型的映射。添加AutowireViewModel 后,此问题已修复。我们仍然可以使用RegisterForNavigation 将您的自定义视图模型绑定到您的特殊视图,而不是自动命名对话。

这是我的简单嵌套标签页示例:https://github.com/landl0526/PrismTabDemo。更详细的代码请参考。

此外,这仅适用于 Android 平台,因为 iOS 只有底部对齐的标签栏。

【讨论】:

  • 感谢您的回复和示例代码。这就是我一直在寻找的。只有一件事如何将活动导航栏放在顶部。我试过``` ``` 但不工作
  • @ebk “顶部导航栏”是什么意思?你在操作哪个标签页?
  • @Land Lu - MSFT 正如你所看到的我保留在顶部的图像,我需要一个部分来显示应该用于第一个 maintab 的徽标。顶部的导航栏意味着保留工具栏项在您的 subtabpage2 示例中,这对所有 maintabs.like 主导航都是通用的。
  • @ebk 如果您的原件已修复。您可以打开一个新线程,在那里指定您的要求。我们可以在那里谈论它。如果您觉得这对您有帮助,请接受它作为答案。
  • defanitelty 我会让这个答案可以接受。对你来说这只是时间问题。请帮助我
猜你喜欢
  • 2015-08-15
  • 2019-12-19
  • 2014-08-30
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多