【问题标题】:Share Context on Xamarin Forms Xaml MasterDetailPage在 Xamarin 表单 Xaml MasterDetailPage 上共享上下文
【发布时间】:2017-05-06 16:56:56
【问题描述】:

我设法在 Xamarin Forms Xaml 上制作了一个可以正常工作的 MasterDetail 页面。 我的 MasterDetailPage 代码是:

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage  xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:vm="clr-namespace:XXX.ViewModel"
             xmlns:conv="clr-namespace:XXX.Converters"
             xmlns:local="clr-namespace:XXX;assembly=XXX"
             x:Class="XXX.MainPage"
             Title="XXX">
  <MasterDetailPage.Master>
    <local:MainMenu />
  </MasterDetailPage.Master>
  <MasterDetailPage.Detail>
    <ContentPage BindingContext="{StaticResource viewModel}" Title="XXX">
      //old MainPage Content
   </ContentPage>
 </MasterDetailPage.Detail>

该应用程序与 ViewModel 一起工作,它像旧的 MainPage 一样启动,如果我从左边摆动它会显示细节。

问题来了,因为我做了所有的更改来为详细内容中的列表视图做一个过滤器菜单,我需要在详细信息和主视图之间共享上下文,以便当用户按下Master中的按钮,Detail的列表内容发生变化。

我还需要知道如何以编程方式打开/关闭 MasterPage。

【问题讨论】:

    标签: c# xaml xamarin.forms master-detail


    【解决方案1】:

    好的,我在这里找到了它gaogang-athena Github

    只需要从 ContentPages 中移除 BindingContext 并添加:

    <MasterDetailPage.BindingContext>
        <vm:MainViewModel />
      </MasterDetailPage.BindingContext>
    

    为了关闭或打开它,我使用了 IsPresented,所以最后我的代码如下所示:

      <?xml version="1.0" encoding="utf-8" ?>
      <MasterDetailPage  xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:vm="clr-namespace:XXX.ViewModel"
                 xmlns:conv="clr-namespace:XXX.Converters"
                 xmlns:local="clr-namespace:XXX;assembly=XXX"
                 x:Class="XXX.MainPage"
                 IsPresented="{Binding MasterIsPresented}"
                 Title="XXX">
      <MasterDetailPage.BindingContext>
        <vm:MainViewModel />
      </MasterDetailPage.BindingContext>
    
      <MasterDetailPage.Master >
        <local:MainMenu/>
      </MasterDetailPage.Master>
      <MasterDetailPage.Detail>
        <ContentPage  Title="XXX">
      ...
    

    【讨论】:

      【解决方案2】:

      如果你想打开/关闭 MasterPage 使用这个:

      public partial class MainPage : MasterDetailPage
          {
              public MainPage()
              {
                  InitializeComponent();
              }
      
              void OnButtonClick(object sender, EventArgs e)
              {
                  // hide master page
                  this.IsPresented = false;
                  // show master page
                  this.IsPresented = true;
              }
          }
      

      【讨论】:

      • 谢谢,我正在尽我所能通过 Xaml 和 Mvvm 来完成这一切,我在 MasterDetailPage 的标题中使用了 IsPresented="{Binding MasterIsPresented}"
      猜你喜欢
      • 1970-01-01
      • 2018-01-20
      • 2018-03-01
      • 1970-01-01
      • 2017-01-24
      • 2017-07-16
      • 2021-01-24
      • 2018-08-16
      相关资源
      最近更新 更多