2015-03-29 10 views
8

Ok, quindi ho il seguente vista:Cast specificato non è valido quando vincolante alla lista dei di POCO

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="BoomSauce.MainPage"> 
    <ListView ItemsSource="{Binding Model.MyPocos}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <Label Text="{Binding MyString}"></Label> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    </ListView> 
</ContentPage> 

Il BindingContext di questa visione è la seguente ViewModel:

public class MainViewModel 
{ 
    public MainModel Model { get; set; } 
} 

Ecco MainModel:

public class MainModel 
{ 
    public List<MyPoco> MyPocos { get; set; } 
} 

Ecco MyPoco:

public class MyPoco 
{ 
    public string MyString { get; set; } 
    public int MyInt { get; set; } 
} 

Ecco quello che sta succedendo in App()

MainPage = new MainPage(); 

var viewModel = new MainViewModel 
{ 
    Model = new MainModel 
    { 
     MyPocos = new List<MyPoco>() 
     { 
      new MyPoco() { MyInt = 1, MyString = "a" }, 
      new MyPoco() { MyInt = 2, MyString = "b" }, 
      new MyPoco() { MyInt = 3, MyString = "c" }, 
      new MyPoco() { MyInt = 4, MyString = "d" }, 
      new MyPoco() { MyInt = 5, MyString = "e" } 
     } 
    } 
}; 

MainPage.BindingContext = viewModel; 

Davvero niente altro da esso, io sono sempre la seguente eccezione:

getto

specificato non è valido.

Ma nessuna eccezione interna e nessun contesto in più, per quanto posso dire che sto facendo tutto correttamente.

Il collegamento a un elenco di stringhe funziona correttamente, è quando sostituisco quello con qualsiasi altro oggetto che le cose vanno male.

Qualche idea su dove sto andando male?

Grazie

risposta

20

Si scopre non si può mettere un'etichetta direttamente all'interno di un DataTemplate, si devono invece a nidificare questo in un ViewCell, in questo modo:

<ViewCell> 
    <ViewCell.View> 
     <Label Text="{Binding MyString}" /> 
    </ViewCell.View> 
</ViewCell> 

Mistero risolto.

+0

Dovresti usare "TextCell" invece di "Etichetta" all'interno di DataTemplate e dovrebbe funzionare. –

+0

@ DavidKarlaš Label sta funzionando per me, ma ** dovrei ** sto usando Textcell invece? – JMK

+1

Non sono sicuro se c'è qualche differenza di prestazioni ... Altrimenti ... Se funziona, non c'è bisogno di cambiare;) –

Problemi correlati