मैं एक webservice का उपयोग कर विंडोज़ फोन एप्लिकेशन पर काम कर रहा हूं।
वेबमाइंड कॉल पूरा करने के बाद मैं किसी अन्य पेज पर नेविगेट करना चाहता हूं। मुझे इस बारे में कोई जानकारी नहीं है कि यह कैसे संभव हो सकता है।
कोड व्यवहार करने के मेरे विचार का एक हिस्सा यहां दिया गया है:
private void Button1Button_Click(object sender, RoutedEventArgs e) { this._ws.InitializeConnexion("my name"); this.NavigationService.Navigate(new Uri("/View/profile.xaml", UriKind.Relative)); }
और यहाँ मेरा विचार मॉडल वर्ग है:
public sealed class MobileViewModel : INotifyPropertyChanged { private WSClient _ws; private T_member _member; public T_member Member { get { return _member; } set { _member = value; this.RaisePropertyChanged("Member"); } } public MobileViewModel() { _ws = new WSMobileClient(); _ws.InitializeConnexionCompleted += new EventHandler<InitializeConnexionCompletedEventArgs>(_ws_InitializeConnexionCompleted); } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName) { PropertyChangedEventHandler propertyChanged = this.PropertyChanged; if (propertyChanged != null) { propertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public void InitializeConnexion(string name) { _ws.InitializeConnexionAsync(name); } private void _ws_InitializeConnexionCompleted(object sender, InitializeConnexionCompletedEventArgs e) { if (e.Error == null) { this.Member = e.Result; } else { MessageBox.Show("error."); } } }
क्या कोई मेरी मदद कर सकता है?
धन्यवाद।
2 जवाब
आप निश्चित रूप से ऐसा कर सकते हैं। कुछ सुझाव:
1) एक आईसीओएमएंड का प्रयोग करें और इसे अपने बटन से बांधें, न कि कोड के पीछे। यह उस तर्क को आपके व्यूमोडेल में रखता है जहां यह संबंधित है। यह कैसे करना है इसका एक उदाहरण यहां दिया गया है। और दूसरा।
2) एक बार जब आप अपने व्यूमोडेल में उस तर्क को प्राप्त कर लेते हैं तो आप संदेशों को वापस दृश्य में भेजने की आवश्यकता के बिना अपनी कनेक्शन स्थिति के साथ नेविगेशन को व्यवस्थित कर सकते हैं। कुछ इस तरह:
private void _ws_InitializeConnexionCompleted(object sender, InitializeConnexionCompletedEventArgs e)
{
if (e.Error != null)
{
this.Member = e.Result;
this.Navigate("/View/profile.xaml");
}
else
{
MessageBox.Show("error.");
}
}
}
protected void Navigate(string address)
{
if (string.IsNullOrEmpty(address))
return;
Uri uri = new Uri(address, UriKind.Relative);
Debug.Assert(App.Current.RootVisual is PhoneApplicationFrame);
((PhoneApplicationFrame)App.Current.RootVisual).Navigate(uri);
}
मैं एक निरंतरता लैम्ब्डा में उस विधि को पास करूंगा जो वेब विधि कॉल को ट्रिगर कर रही है - निरंतरता तब निष्पादित की जाती है जब कॉल सफलतापूर्वक पूरा हो गया हो:
private void Button1Button_Click(object sender, RoutedEventArgs e)
{
InitializeConnexion("my name", () =>
{
this.NavigationService.Navigate(new Uri("/View/profile.xaml", UriKind.Relative));
});
}
आप इसे Action
के रूप में MobileViewModel
क्लास में स्टोर कर सकते हैं।
Action _webCallCompletedAction;
public void InitializeConnexion(string name, Action action)
{
webCallCompletedAction = action;
_ws.InitializeConnexionAsync(name);
}
और अंत में आपकी वेब सेवा पूरी होने के बाद इसे निष्पादित करें:
private void _ws_InitializeConnexionCompleted(object sender,
InitializeConnexionCompletedEventArgs e)
{
if (e.Error != null)
{
this.Member = e.Result;
webCallCompletedAction();
}
else
{
MessageBox.Show("error.");
}
}
}
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।