2016-05-02 13 views
9

Sto lottando con l'associazione dei dati in Xamarin Forms. Ecco perché, quello che mi aspetto che accada dal seguente dichiarazione XAML:Xamarin Forms Databinding "." separatore

IsVisible="{Binding Path=UserContext.IsLoggedOut}" 

È - che la proprietà è associato a un oggetto figlio del Modello View. Ora questo non è supportato in Xamarin Forms o mi manca un trucco.

Se questo non è supportato in Xamarin, dove è supportato in WPF, cosa dovremmo fare per propagare oggetti nidificati? Appiattire il View Model mi sta facendo scrivere risme e risme di codice inelegante.

+0

Come funziona UserContext assomigliare? –

+0

UserContext è una proprietà della classe viewModel. L'oggetto UserContext ha una proprietà denominata IsLoggedOut –

+0

potresti incollare il codice? –

risposta

13

proprietà nidificate, come altra espressione piuttosto complessa così:

potete provarlo:

Xaml

<StackLayout Spacing="20"> 
    <StackLayout Orientation="Horizontal"> 
    <Label Text="Subproperties: " HorizontalOptions="FillAndExpand" FontSize="15"></Label> 
    <Label Text="{Binding Item.SubItem.Text}" HorizontalOptions="FillAndExpand" FontSize="15"></Label> 
    </StackLayout> 
    <StackLayout Orientation="Horizontal"> 
    <Label Text="Indexer: " HorizontalOptions="FillAndExpand" FontSize="15"></Label> 
    <Label Text="{Binding Item.Dictionary[key].Text}" HorizontalOptions="FillAndExpand" FontSize="15"></Label> 
    </StackLayout> 
    <StackLayout Orientation="Horizontal"> 
    <Label Text="Array Indexer: " HorizontalOptions="FillAndExpand" FontSize="15"></Label> 
    <Label Text="{Binding Item.Array[1].Text}" HorizontalOptions="FillAndExpand" FontSize="15"></Label> 
    </StackLayout> 
</StackLayout> 

Pagina

public partial class Page2 : ContentPage 
{ 
    public ItemModel Item { get; } 

    public Page2() 
    { 
     InitializeComponent(); 
     Item = new ItemModel(); 
     BindingContext = this; 

    } 
} 

public class ItemModel 
{ 
    public ItemSubModel SubItem { get; set; } 
    public Dictionary<string, ItemSubModel> Dictionary { get; set; } 
    public ItemSubModel[] Array { get; set; } 

    public ItemModel() 
    { 
     SubItem = new ItemSubModel(); 
     Dictionary = new Dictionary<string, ItemSubModel> 
     { 
      {"key", new ItemSubModel()} 
     }; 
     Array = new [] {new ItemSubModel(), new ItemSubModel() }; 
    } 
} 

public class ItemSubModel 
{ 
    public string Text { get; set; } = "Supported"; 
} 

Risultato

enter image description here

+0

Hai ragione deve essere qualcosa a che fare con il mio codice. Aggiornerà. –

+0

OK, non sono sicuro di quale sia stato esattamente il problema, ma ho implementato di nuovo tutto da zero e ora tutto funziona perfettamente. Grazie Sven-Michael! –

0

Suppongo che tu stia provando in Xaml. Prova a rimuovere "Percorso".

IsVisible="{Binding UserContext.IsLoggedOut}" 

tuttavia ancora più importante, qual è il tuo BindingContext? Affinché il codice sopra riportato funzioni, è necessario che lo BindingContext sia impostato sulla classe Foo, che ha una proprietà denominata UserContext, che ha una proprietà IsLoggedOut.

Date un'occhiata here e sono supportati

+0

BindingContext è impostato sul mio modello di vista nel codice. Il modello di vista ha una proprietà chiamata UserContext, che a sua volta ha una proprietà chiamata IsLoggedOut. In Xamarin Forms questa propagazione non sembra funzionare e non è documentata ovunque io pensi. AllDayer puoi far funzionare questo genere di cose? –

Problemi correlati