2014-12-16 11 views
7

मैं ज़ैमरिन के साथ काम कर रहा हूं, अभी भी इसके लिए नया हूं, लेकिन मुझे एक समस्या है कि मुझे यह महसूस हो रहा है कि मुझे नहीं होना चाहिए। यहाँ मेरी समस्या है:एक्समरिन फॉर्म "... वर्तमान संदर्भ में DisplayAlert मौजूद नहीं है।"

using System; 
using Xamarin.Forms; 

namespace DataBinding_Lists 
{ 
public class App 
{ 
    public static Page GetMainPage() 
    { 
     var listView = new ListView { RowHeight = 40 }; 
     listView.ItemsSource = new Person [] 
     { 
      new Person { FirstName = "Abe", LastName = "Lincoln" }, 
      new Person { FirstName = "Groucho", LastName = "Marks" }, 
      new Person { FirstName = "Carl", LastName = "Marks" }, 
     }; 

     listView.ItemTemplate = new DataTemplate(typeof(TextCell)); 
     listView.ItemTemplate.SetBinding(TextCell.TextProperty, "FirstName"); 
     listView.ItemSelected += async (sender, e) => { 
      await DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", ""); 
     }; 

     return new ContentPage { 
      Content = new StackLayout 
      { 
       Padding = new Thickness (5,20,5,5), 
       Spacing = 10, 
       Children = { listView } 
      } 
     }; 
    } 

} 

}

जाहिर है, मैं नामक एक अन्य पृष्ठ पर एक वर्ग मिल गया है "व्यक्ति।" इस वर्ग में दो गुण हैं: "फर्स्टनाम" और "लास्टनाम"। जब मैं Xamarin में इस तरह की कोशिश करता हूं और इसे सब कुछ एक साथ रखता हूं, तो मुझे यह कहते हुए त्रुटि मिलती है: "वर्तमान संदर्भ में 'DisplayAlert' नाम मौजूद नहीं है।"

+0

वह त्रुटि आपको बता रही है कि Xamarin को पता नहीं है कि DisplayAlert क्या है। आप शायद किसी असेंबली का संदर्भ खो रहे हैं, 'उपयोग' कथन या दोनों को याद कर रहे हैं। –

+0

_DisplayAlert_ विधि का उपयोग "Xamarin.Forms" द्वारा किया जाता है, जैसा ऊपर बताया गया है, मैं उपयोग कर रहा हूं। DisplayAlert Xamarin द्वारा और उसके लिए बनाई गई एक विधि है, इसलिए यदि मैं इसका उपयोग कर रहा हूं तो यह मुझे बता रहा है, तो मुझे नहीं पता कि यह अभी भी मुझे यह त्रुटि क्यों दे रहा है। (http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/pop-ups/) – prinsJoe

+1

हां, लेकिन यह 'पृष्ठ' वर्ग का एक तरीका है (सुनिश्चित नहीं है कि यह स्थिर है या नहीं सदस्य विधि), लेकिन आप इसे 'पेज' उपसर्ग का उपयोग करके न बुला रहे हैं और न ही आपके' ऐप 'वर्ग को' पृष्ठ 'वर्ग से प्राप्त किया गया है, इसलिए इसका यह जानने का कोई तरीका नहीं है कि इसे कैसे कॉल किया जाए।आपको या तो 'Page.DisplayAlert() '(यदि यह एक स्थिर विधि है) करना है या अपने' ऐप 'वर्ग को' पृष्ठ 'से प्राप्त करना है और कॉल करने का वर्तमान तरीका रखना है। –

उत्तर

6

इसे हल करने के दो तरीके हैं और मैं दूसरे की तरफ झुकता हूं। एडवर्ड एल ने क्या कहा है इसके करीब।

DisplayAlert Xamarin.Forms पेज पर एक विधि है ... और आप उस स्थिर विधि के अंदर हैं जो उस पृष्ठ को वापस कर रहा है, इसलिए आपके पास इसका कोई संदर्भ नहीं है।

तो तुम ऐसा कर सकता है:

using System; 
using Xamarin.Forms; 

namespace DataBinding_Lists 
{ 
public class App 
{ 
    private static Page page; 
    public static Page GetMainPage() 
    { 
     var listView = new ListView { RowHeight = 40 }; 
     listView.ItemsSource = new Person [] 
     { 
      new Person { FirstName = "Abe", LastName = "Lincoln" }, 
      new Person { FirstName = "Groucho", LastName = "Marks" }, 
      new Person { FirstName = "Carl", LastName = "Marks" }, 
     }; 

     listView.ItemTemplate = new DataTemplate(typeof(TextCell)); 
     listView.ItemTemplate.SetBinding(TextCell.TextProperty, "FirstName"); 
     listView.ItemSelected += async (sender, e) => { 
      await page.DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", ""); 
     }; 

     page = new ContentPage { 
      Content = new StackLayout 
      { 
       Padding = new Thickness (5,20,5,5), 
       Spacing = 10, 
       Children = { listView } 
      } 

     }; 
     return page; 
    } 

} 
} 

क्या तुम सच में करना एक नया वर्ग अपने पृष्ठ है कि पैदा करना चाहिए।

आपका App.cs इस में बदल जाता है:

using System; 
using Xamarin.Forms; 

namespace DataBinding_Lists 
{ 
public class App 
{ 
    public static Page GetMainPage() 
    { 
     return new PeoplePage(); 
    } 

} 
} 

तो फिर तुम एक नया वर्ग है कि पृष्ठ से विरासत बनाएँ: का उपयोग कर प्रणाली; Xamarin.Forms का उपयोग कर ;

namespace DataBinding_Lists 
{ 
public class PeoplePage : Page 
{ 
    public PeoplePage() 
    { 
     var listView = new ListView { RowHeight = 40 }; 
     listView.ItemsSource = new Person [] 
     { 
      new Person { FirstName = "Abe", LastName = "Lincoln" }, 
      new Person { FirstName = "Groucho", LastName = "Marks" }, 
      new Person { FirstName = "Carl", LastName = "Marks" }, 
     }; 

     listView.ItemTemplate = new DataTemplate(typeof(TextCell)); 
     listView.ItemTemplate.SetBinding(TextCell.TextProperty, "FirstName"); 
     listView.ItemSelected += async (sender, e) => { 
      await DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", ""); 
     }; 

     Content = new ContentPage { 
      Content = new StackLayout 
      { 
       Padding = new Thickness (5,20,5,5), 
       Spacing = 10, 
       Children = { listView } 
      } 

     }; 
    } 

} 
} 
+0

मैं सीधे एक्समरिन ट्यूटोरियल्स से बाहर काम कर रहा हूं, इसलिए यह बहुत परेशान था कि मैं इन सबके माध्यम से जाना था, लेकिन आप स्थिर पृष्ठ पेज_ विचार को बिल्कुल सही था जो मुझे चाहिए! धन्यवाद! – prinsJoe

4

DisplayAlert()Page कक्षा का एक तरीका है।

अपनी कक्षा का उपयोग करने में सक्षम होने के लिए, इसे या तो Page ऑब्जेक्ट को तुरंत चालू करने की आवश्यकता है और उस ऑब्जेक्ट का उपयोग करके इसे सीधे आमंत्रित करें या सीधे इससे प्राप्त करें।

जब से तुम ने कहा कि अपने Person वर्ग वास्तव में भी एक Page वर्ग है, आप भी यह i.e. personObj.DisplayAlert(...)

शायद कुछ निम्न के समान अपने Person वस्तुओं में से एक का उपयोग कर आह्वान सकता:

var personObj = new Person(); 
personObj.DisplayAlert ("Tapped!", e.SelectedItem + " was tapped.", "OK", ""); 

यह की बेशक, मान लीजिए कि आपकी व्यक्तिगत श्रेणी की घोषणा निम्न की तरह कुछ है:

public class Person : Page 
{ 
    ... 
} 

जाहिर है, सटीक कार्यान्वयन इस बात पर निर्भर करेगा कि आप अपना कोड कैसे बनाते हैं। मैं बस आपके प्रश्न में जो कुछ देख सकता हूं और कुछ चीजें मान रहा हूं।

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