2015-03-29 8 views
8

ठीक है तो मैं निम्नलिखित दृश्य है:निर्दिष्ट डाली मान्य नहीं है POCO के

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

यहाँ MainModel है:

<?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> 

इस दृश्य के BindingContext निम्नलिखित ViewModel है:

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

यहाँ MyPoco है:

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

यहाँ 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; 

वास्तव में यह और कुछ नहीं, मैं निम्न अपवाद हो रही है:

निर्दिष्ट डाली मान्य नहीं है।

लेकिन कोई आंतरिक अपवाद नहीं है और कोई और संदर्भ नहीं है, जहां तक ​​मैं कह सकता हूं कि मैं सब ठीक से कर रहा हूं।

स्ट्रिंग की एक सूची के लिए बाइंडिंग ठीक काम करता है, जब मैं किसी अन्य वस्तु के साथ कोई बात बिगड़ जाए कि उस की जगह बस।

कोई विचार जहां मैं गलत हो रहा हूं?

धन्यवाद

उत्तर

20

यह आपको एक लेबल सीधे एक DataTemplate के अंदर नहीं डाल सकते बदल जाता है, आप के बजाय घोंसला को यह एक ViewCell में इतनी तरह है,:

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

रहस्य को हल किया।

+0

आपको डेटा टेम्पलेट के अंदर "लेबल" के बजाय "टेक्स्टसेल" का उपयोग करना चाहिए और इसे काम करना चाहिए। –

+0

@ डेविडकारला लेबल मेरे लिए काम कर रहा है, लेकिन ** ** क्या मुझे टेक्स्टसेल का उपयोग करना चाहिए? – JMK

+1

सुनिश्चित नहीं है कि कोई प्रदर्शन अंतर है ... अन्यथा ... यदि यह काम करता है, तो बदलने की कोई आवश्यकता नहीं है;) –

संबंधित मुद्दे