2016-07-24 17 views
10

पर XAML में ViewModel को बाध्यकारी कॉन्टेक्स्ट सेट करें I Xamarin.Form और MVVM के साथ एक साधारण प्रोजेक्ट विकसित करना चाहते हैं। मेरे समाधान (नाम XamarinPOC) में (मानक Xamarin.Forms परियोजनाओं के अलावा) मॉडल के लिए एक अलग परियोजना (XamarinPOC.Model) और ViewModel (XamarinPOC.ViewModel) के लिए एक अलग परियोजना है।Xamarin.Forms

namespace XamarinPOC.ViewModel 
{ 
    public class SummaryViewModel : BaseViewModel 
    { 

     private string _test = "The binding is OK!"; 
     public String test 
     { 
      get 
      { 
       return _test; 
      } 
      set 
      { 
       _test = value; 
       OnPropertyChanged("test"); 
      } 
     } 
     public SummaryViewModel(){} 
    } 
} 
:

मैं एक BaseViewModel वर्ग के लिए एक अमूर्त वर्ग (कि INotifyPropertyChanged इंटरफ़ेस लागू करता है) और के बाद मैं एक SummaryViewModel वर्ग है कि एक साधारण संपत्ति के साथ BaseViewModel वर्ग का विस्तार बनाए जा चुके XamarinPOC.ViewModel परियोजना में परिभाषित किया गया

अगला मैंने XamarinPOC प्रोजेक्ट में एक साधारण ContentPage (SummatyView) बनाया है जिसमें केवल एक लेबल है जिसे मैं ViewModel में परिभाषित पाठ दिखाना चाहता हूं। मैं दृश्य और बाध्यकारी को परिभाषित करने के लिए एक एक्सएएमएल का उपयोग करना चाहता हूं लेकिन जब मैं ऐप चलाता हूं तो कुछ भी प्रदर्शित नहीं होता है, मुझे संकलन-समय और रनटाइम पर कोई त्रुटि नहीं होती है लेकिन पाठ प्रदर्शित नहीं होता है। मेरे XAML इस

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:XamarinPOC.ViewModel,assembly=XamarinPOC.ViewModel" 
      x:Class="XamarinPOC.Summary" 
      Title="Summary List" 
      BindingContext="XamarinPOC.ViewModel.SummaryViewModel"> 
    <StackLayout> 
    <Label Text="{Binding test}"/> 
    </StackLayout> 
</ContentPage> 

और अंत में मेरी app.cs है:

namespace XamarinPOC 
{ 
    public class App : Application 
    { 
     public App() 
     { 
      MainPage = new Summary(); 
     } 
    } 
} 

XamarinPOC परियोजना मैं XamarinPOC.ViewModel और XamarinPOC.Model विधानसभाओं के लिए एक संदर्भ में जोड़ दिया है।

मुझे लगता है कि समस्या बाध्यकारी की XAML परिभाषा में है, लेकिन मुझे त्रुटि नहीं मिली है। मैं कहाँ गलत हूँ?

+2

आप BindingContext आवंटित करने के लिए अपने ViewModel की * एक * उदाहरण की जरूरत है, नहीं वर्ग परिभाषा ही – Jason

उत्तर

13

अपने मामले में Xaml से viewmodel को देखने के लिए बाध्य करने के लिए इस

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:viewModels="clr-namespace:XamarinPOC.ViewModel; assembly=XamarinPOC.ViewModel" 
      x:Class="XamarinPOC.Summary" 
      Title="Summary List"> 
    <ContentPage.BindingContext> 
    <viewModels:SummaryViewModel/> 
    </ContentPage.BindingContext> 
    <StackLayout> 
    <Label Text="{Binding test}"/> 
    </StackLayout> 
</ContentPage> 

एक ओर टिप्पणी मैंने देखा की तरह यह कर यह आपके सभी ViewModels डाल करने के लिए बेहतर है, नामकरण रिवाजों का साथ है, भले ही यह है केवल एक ViewModel, नाम का एक फ़ोल्डर के अंदर "ViewModel रों" तो अपने मामले में नाम स्थान XamarinPOC.ViewModel रों

+0

होगा उत्तर के लिए धन्यवाद इसके बाद, मैंने आपके समाधान की कोशिश की लेकिन ऐप ने नामस्थान 'xmlns: स्थानीय =" clr-namespace: XamarinPOC.ViewModel को हल करने का प्रयास करने पर एक रनटाइम अपवाद फेंक दिया; असेंबली = XamarinPOC.ViewModel "' लेकिन आपका समाधान सही दिशा में जा रहा है, अन्य खोजों के बाद मुझे सही कार्यान्वयन की जानकारी मिली है: 'xmlns: mvvm =" clr-namespace: XamarinPOC.ViewModel; असेंबली = XamarinPOC.ViewModel "आपके समाधान के साथ एकमात्र अंतर xmlns उपसर्ग में है, क्योंकि ** xmlns का उपयोग: स्थानीय ** इस मामले में गलत है और मुझे एक और उपसर्ग का उपयोग करने की आवश्यकता है (मैं ** xmlns: mvvm ** चुनता हूं) – fabiuz

+0

ग्रेट बस इसे ठीक कर दिया – BraveHeart

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