2017-12-06 7 views
0

Wie binden Sie eine Registerseite mit verschiedenen Ansichtsmodellen? Um es klarer Ich habe diese Registerseite:Xamarin TabbedPages MVVM-Bindung

<TabbedPage.Children>  
    <tabPages:Page1/> 
    <tabPages:Page2/> 
    <tabPages:Page3/> 
</TabbedPage.Children> 

Diese drei Seiten haben unterschiedliche Ansicht Modelle. Das Problem besteht jedoch darin, dass die Ansichtsmodelle jeder Seite nicht gebunden werden. Gibt es dafür einen spezifischen Weg?

Um zu testen, ob meine Ansicht Modelle für jede Seite funktioniert, habe ich den Code in Registerseite: z.

<TabbedPage.Children> 
    <ContentPage Title="Test"> 
    <Label Text="{Binding TestBind}"/> 
    </ContentPage> 
</TabbedPage.Children> 

Und für binden sie an das Ansichtsmodell der Registerseite (übergeordneten) - diese Methode funktioniert. Wenn ich es jedoch separat tue, würden die Ansichtsmodelle nicht binden. Zum Beispiel

public class Page1ViewModel : BaseViewModel 
{ 
     public Page1ViewModel() 
     { 
      TestBind = "Test"; 
     } 
     private string _TestBind; 
     public string TestBind 
     { 
      get { return _TestBind; } 
      set { SetProperty(ref _TestBind, value); } 
     } 
} 

es auf diese Weise verwenden, wäre es nicht binden

Antwort

0

Warum nicht nur das Binding jeden TabPage zu jedem Ansichtsmodell gesetzt:

<TabbedPage.Children>  
    <tabPages:Page1 BindingContext="{Binding viewModel1}" /> 
    <tabPages:Page2 BindingContext="{Binding viewModel2}" /> 
    <tabPages:Page3 BindingContext="{Binding viewModel3}"/> 
</TabbedPage.Children> 

Diese Viewmodel müssen als Eigenschaften existieren würden in die übergeordnete VM.

+0

Dann würde das bedeuten, dass ich noch die Eigenschaften innerhalb jedes Ansichtsmodells in das übergeordnete Ansichtsmodell initialisieren müsste? Entschuldigung, aber korrigiere mich, wenn ich falsch liege. Danke –

1

ich gemacht habe es funktioniert, so ist dies, was ich tat:

<TabbedPage.Children> 
     <views:ChildPage1> 
      <views:ChildPage1.BindingContext> 
       <viewModels:ChildPage1ViewModel/> 
      </views:ChildPage1.BindingContext> 
     </views:ChildPage1> 
     <views:ChildPage2> 
      <views:ChildPage2.BindingContext> 
       <viewModels:ChildPage2ViewModel/> 
      </views:ChildPage2.BindingContext> 
     </views:ChildPage2> 
    </TabbedPage.Children> 

Ich benutzte Bindungskontexteigenschaft des Elements es einzustellen.

+0

Froh, es hat funktioniert !! – Maximus