2014-06-15 2 views
9

अब तक, Xamarin.Forms का उपयोग करने वाले अधिकांश उदाहरण यूआई बनाने के लिए सी # का उपयोग कर रहे हैं। मैं UI के लिए XAML का उपयोग करना पसंद करता हूं, और इसे ViewModels पर डेटाबेस करता हूं।Xamarin में MasterDetailPage के लिए XAML में डाटाबेसिंग। Forms

मुझे XAML के साथ संयोजन में Xamarin.Forms.MasterDetailPage का उपयोग करने में समस्या हो रही है, और मैं XAML + ViewModels को C# उदाहरण पोर्ट नहीं कर सकता।

यह XAML मैं अब तक मिल गया है:

<?xml version="1.0" encoding="UTF-8" ?> 
<MasterDetailPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:NSContacten;assembly=NSContacten" 
    x:Class="MasterDetailExample.Main" 
    Title="Master Detail Example"> 

    <MasterDetailPage.Master BindingContext="{Binding Menu}"> 
     <ContentPage Padding="5, 25">    
      <StackLayout Orientation="Vertical"> 
       <Label Text="Master" HorizontalOptions="Center" /> 
       <Label Text="{Binding Subtitle}" HorizontalOptions="Center" /> 
      </StackLayout>  
     </ContentPage> 
    </MasterDetailPage.Master> 

    <MasterDetailPage.Detail BindingContext="{Binding Detailpage}"> 
     <ContentPage Padding="5, 25">  
      <StackLayout Orientation="Vertical"> 
       <Label Text="Detail" HorizontalOptions="Center" /> 
       <Label Text="{Binding Subtitle}" HorizontalOptions="Center" /> 
      </StackLayout>  
     </ContentPage> 
    </MasterDetailPage.Detail>  
</MasterDetailPage> 

घटक काम करता है: मैं 'मास्टर' और 'विस्तार' लेबल देखते हैं। बाध्य लेबल (बाइंडिंग कॉन्टेक्स्ट ऑब्जेक्ट्स पर) प्रदर्शित नहीं होते हैं।

मैंने विभिन्न संयोजनों के भार का उपयोग किया है, लेकिन मैं अभी भी अटक गया हूं: यह कैसे काम करता है? क्या मेरा बाध्यकारी गलत है (क्या यह "ContentPage" पर होना चाहिए), क्या मैं इसे मस्टर और डैंच गुण आदि से बांध नहीं सकता? "मेनू" और "विस्तार पृष्ठ" बाइंडिंग कैसा दिखना चाहिए?

अगर कोई मेरी मदद कर सकता है तो यह एक बड़ी मदद होगी! अगला कदम यह होगा कि जब। ​​बटन में बटन दबाया जाता है तो डैंच बदल जाएगा। अग्रिम में धन्यवाद!

+0

इस प्रश्न पूछने के लिए धन्यवाद! मुझे एक दिन यह पता लगाने की कोशिश कर रहा था और मुझे इस सवाल के बिना नहीं होगा। –

उत्तर

16

आपका Xaml लगभग ठीक है, लेकिन:

  • {BindingContext} संपत्तियों पर अवैध हैं और ContentPage तत्वों
  • MasterDetailPage.Masterपर होना चाहिए की आवश्यकता होती है एक Page.Title स्थापित किया जाना है, या यह फेंकता है।

यहाँ सही Xaml मेरे लिए काम कर रहा है:

<?xml version="1.0" encoding="UTF-8" ?> 
<MasterDetailPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:NSContacten;assembly=NSContacten" 
    x:Class="MasterDetailExample.Main" 
    Title="Master Detail Example"> 

    <MasterDetailPage.Master> 
     <ContentPage Padding="5, 25" BindingContext="{Binding Menu}" Title="Master"> 
      <StackLayout Orientation="Vertical"> 
       <Label Text="Master" HorizontalOptions="Center" /> 
       <Label Text="{Binding Subtitle}" HorizontalOptions="Center" /> 
      </StackLayout> 
     </ContentPage> 

    </MasterDetailPage.Master> 

    <MasterDetailPage.Detail> 
     <ContentPage Padding="5, 25" BindingContext="{Binding Detailpage}"> 

      <StackLayout Orientation="Vertical"> 
       <Label Text="Detail" HorizontalOptions="Center" /> 
       <Label Text="{Binding Subtitle}" HorizontalOptions="Center" /> 
      </StackLayout> 

     </ContentPage> 
    </MasterDetailPage.Detail> 
</MasterDetailPage> 

मैं पृष्ठ दृश्य मॉडल के रूप में एक गुमनाम प्रकार के साथ यह परीक्षण किया:

public MyMDPage() 
{ 
    InitializeComponent(); 
    BindingContext = new { 
     Menu = new { Subtitle = "I'm Master" }, 
     Detailpage = new { Subtitle = "I'm Detail" } 
    }; 
} 

और यह सिर्फ ठीक काम करता है। आपके मामले में, शायद आप अपने दृश्य मॉडल के लिए अज्ञात लोगों के बजाय ठोस प्रकार चाहते हैं, लेकिन आपको विचार मिलता है।

+0

धन्यवाद स्टीफन, जो बहुत अच्छा काम करता है! Page.Title पर .मास्टर को हटाया जा सकता है (कम से कम आईओएस के लिए, अन्य प्लेटफार्मों की जांच नहीं की गई है), लेकिन MasterDetailPage के लिए "बाइंडिंग कॉन्टेक्स्ट" मेरे समाधान के लिए महत्वपूर्ण था। एक बार फिर से धन्यवाद! – MarcoK

+2

@ मार्को: यदि शीर्षक अनिवार्य नहीं है तो आप नवीनतम संस्करण नहीं चला रहे हैं। एक nuget अद्यतन करें –

+0

धन्यवाद इस उत्तर के लिए एक गुच्छा। हालांकि मैं Xamarin में बाध्यकारी संपत्ति का उपयोग कर रहा हूँ। फोरम तर्क समान है। –

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