2016-12-21 3 views
0

Мне удалось создать страницу MasterDetail на Xamarin Forms Xaml, которая работает нормально. Мой MasterDetailPage код:Share Context on 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> 

Приложение работает прямо с ViewModel, он запускает, как старый MainPage, и если я качаться слева он показывает детали.

Проблема возникает из-за того, что я сделал все изменения, чтобы сделать меню фильтров для списка, который находится в подробном содержании, и мне нужно разделить контекст между деталями и мастером, чтобы при нажатии пользователем кнопка в Мастере, содержимое списка Детали изменяется.

Также мне нужно знать, как открыть/закрыть MasterPage программно.

ответ

0

Хорошо, я нашел его здесь gaogang-athena Github

Просто нужно удалить BindingContext из ContentPages и добавить:

<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

Если вы хотите открытия/закрытия 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 = "{Binding MasterIsPresented}" в заголовке MasterDetailPage – Mulflar

Смежные вопросы