2016-12-21 6 views
0

Xamarin Forms Xaml에서 MasterDetail Page를 만들었습니다. 내 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처럼 실행, 나는 왼쪽에서 스윙하는 경우가 세부 사항을, 오른쪽의 ViewModel와 함께 작동합니다.

세부 내용에있는 목록보기에 대한 필터 메뉴를 수행하기 위해 모든 변경 작업을 수행했기 때문에 문제가 발생했습니다. 사용자가 세부 정보와 마스터를 순서대로 공유해야하므로 마스터의 버튼을 누르면 세부 정보의 목록 내용이 변경됩니다.

또한 프로그래밍 방식으로 마스터 페이지를 열고 닫는 방법을 알아야합니다. 내 코드처럼 보이는 말도록

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

, 나는 IsPresented을 사용 닫거나를 열려면 :

답변

0

좋아, 나는

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

당신은/닫기 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; 
     } 
    } 
+0

고마워, 내가 할 수있는대로 Xaml과 Mvvm에서 모든 것을 시도하고있다. IsPresented = "{MasterIsPresented}"를 MasterDetailPage 헤더에 사용했다. – Mulflar