मैं एक 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
fliim 30 अप्रैल 2011, 20:00

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);            
}
0
dkackman 30 अप्रैल 2011, 21:47
ICommand काफी दिलचस्प लग रहा है। लेकिन, मेरे पास मेरे व्यूमोडेल से नेविगेशन सेवा की कोई दृश्यता नहीं है।
 – 
fliim
30 अप्रैल 2011, 21:32
आपके अतिरिक्त कोड के लिए धन्यवाद। मैंने यह कोशिश की लेकिन मुझे एक App.Current.RootVisual null मिला। यह कैसे संभव है ?
 – 
fliim
30 अप्रैल 2011, 23:32
आपका App.Xaml.cs कैसा दिखता है? यदि यह प्रोजेक्ट विज़ार्ड द्वारा बनाया गया है, तो आपको कुछ इस तरह देखना चाहिए: // इस विधि में कोई अतिरिक्त कोड न जोड़ें, Private void CompleteInitializePhoneApplication (ऑब्जेक्ट प्रेषक, नेविगेशनइवेंटArgs e) {// एप्लिकेशन को रेंडर करने की अनुमति देने के लिए रूट विज़ुअल सेट करें यदि (रूटविज़ुअल! = रूटफ़्रेम) रूटविज़ुअल = रूटफ़्रेम; // इस हैंडलर को हटा दें क्योंकि अब इसकी जरूरत नहीं है RootFrame.Navigated -= CompleteInitializePhoneApplication; }
 – 
dkackman
30 अप्रैल 2011, 23:54
अंत में यह अच्छी तरह से काम करता है! यह केवल एक विधि जोड़कर नेविगेट करने का एक आसान तरीका है। धन्यवाद
 – 
fliim
1 मई 2011, 05:57

मैं एक निरंतरता लैम्ब्डा में उस विधि को पास करूंगा जो वेब विधि कॉल को ट्रिगर कर रही है - निरंतरता तब निष्पादित की जाती है जब कॉल सफलतापूर्वक पूरा हो गया हो:

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.");
       }
   }
}
1
BrokenGlass 30 अप्रैल 2011, 21:52
आपके उत्तर के लिए धन्यवाद। यह ViewModel से नेविगेट करने का एक और तरीका है। आपके समाधान के साथ, हम उरी को पीछे के व्यू कोड से पास कर सकते हैं, यह बेहतर हो सकता है।
 – 
fliim
1 मई 2011, 06:02