2016-12-21 17 views
0

Xamarin Forms Xaml上でMasterDetail Pageを作成して問題なく動かすことができました。 マイMasterDetailPageコードは次のとおりです。Xamarinフォームのコンテキストを共有する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> 

アプリは、それは昔のメインページのように起動し、私は左からスイングあれば、それは詳細を示し、右のViewModelに対応しています。

問題は、詳細コンテンツに含まれるリストビューに対してフィルタメニューを実行するための変更が行われたために発生し、ユーザーが詳細を入力したときに詳細とマスターとのコンテキストを共有する必要がありますマスターのボタン、詳細のリスト内容が変更されます。

また、プログラムでマスターページを開く/閉じる方法を知る必要があります。私のコードは次のように見える終わりになるよう

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

が、私はIsPresentedを使用閉じたり、それを開くには:

答えて

0

[OK]を、私は

gaogang-athena GithubちょうどContentPagesからのBindingContextを削除し、追加する必要があり、ここでそれを見つけました:

<?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

関連する問題