2016-12-21 53 views
0

我設法在Xamarin Forms Xaml上創建了一個MasterDetail頁面,它工作正常。 我MasterDetailPage代碼:在Xamarin Forms Xaml上共享上下文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> 

的應用支持視圖模型正確,它會啓動像老的MainPage,如果我從左邊擺動它顯示的細節。

問題出現是因爲我做了所有更改,以便爲詳細內容中的listview執行過濾器菜單,並且我需要共享上下文以瞭解詳細信息和主體,以便當用戶按下Master中的按鈕,Detail的列表內容發生變化。

另外我需要知道如何以編程方式打開/關閉MasterPage。

回答

0

好吧,我在這裏找到gaogang-athena Github

只需要從內容網頁,刪除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"> 
    ... 
1

如果你想打開/關閉母版使用本:

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; 
     } 
    } 
+0

謝謝,我試圖通過Xaml和Mvvm完成所有工作,我在MasterDetailPage的頭文件中使用了IsPresented =「{Binding MasterIsPresented}」 – Mulflar