2014-02-11 208 views
0

我在Windows Phone.Please是初學者幫我在這: -綁定數據

這是我從一個服務提取類: -

public class Answer 
{ 
    public string answerId { get; set; } 
    public string answer { get; set; } 
} 

public class Question 
{ 
    public string questionId { get; set; } 
    public string questionTitle { get; set; } 
    public string storyUrl { get; set; } 
    public string correctAnswerId { get; set; } 
    public List<Answer> answers { get; set; } 
} 

public class RootObject 
{ 
    public string response { get; set; } 
    public string message { get; set; } 
    public string questionType { get; set; } 
    public string device_id { get; set; } 
    public string quiz_type { get; set; } 
    public int totalQuestion { get; set; } 
    public List<Question> questions { get; set; } 

} 

現在的幫助下這個,我想在一個單選按鈕中的文本塊&選項中綁定問題。 我下面的編碼反序列化JSON: -

WebClient wc = new WebClient(); 
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
wc.DownloadStringAsync(new Uri("my service url")); 

我用這個方法:wc_DownloadStringCompleted()

和編寫代碼

var rootObject = JsonConvert.DeserializeObject<RootObject>(e.Result); 

     val = rootObject.device_id; 

     Question ques = new Question 
     { 
      questionTitle = rootObject.questions.Last().questionTitle, 
      answers = rootObject.questions.Last().answers.Select(ans => new Answer { answer = ans.answer, answerId = ans.answerId }).ToList(), 
      questionId = rootObject.questions.Last().questionId, 
      storyUrl = rootObject.questions.Last().storyUrl, 
      correctAnswerId = rootObject.questions.Last().correctAnswerId 

     }; 
     txtQuestion.DataContext = ques.questionTitle; 
     rb1.Content = ques.answers.ElementAt(0).answer; 
     rb2.Content = ques.answers.ElementAt(1).answer; 
     rb3.Content = ques.answers.ElementAt(2).answer; 
     rb4.Content = ques.answers.ElementAt(3).answer; 

這就是我得到了我的最後一個問題,從服務

我的頁面情景是: - on 提交 button c舔正確的答案將顯示& a按鈕「Next」是可見的顯示下一個問題。

請幫我在這.....

+3

你試過了什麼?你是否希望我們爲你完成整個工作,使用XAML設計UI以便能夠顯示多個具有多個選擇答案的問題,然後將它們綁定到來自Web服務的數據?不,所以SO不是免費的代碼服務。並且你的[上一個問題](http://stackoverflow.com/a/21693618/2998271)中提出的解決方案會發生什麼情況?如果你嘗試過,發佈你如何嘗試,以及有什麼問題? – har07

+0

感謝您的回覆。我嘗試在文本塊和單選按鈕中獲得問題和選項,但我只能得到第一個問題及其各自的選項。並且請不要幫助我設計xaml並顯示選項我只想要如何做到這一點的概念,如果您知道請分享它..關於我以前的問題,解決方案此時不起作用。 – rr11

+0

所以你設法得到第一個問題和各自的選項顯示,你是怎麼做到的?請張貼它,我們會認爲這是你已經嘗試過的努力。你以後期待什麼? – har07

回答

0

你可以試試這個方法:Question類型的

聲明變量來保存顯示的當前問題索引:

private int CurrentQuestionIndex; 

申報集合變量(如果您打算稍後使用數據綁定,則使用ObservableCollection而不是List)來容納來自Web服務的所有問題:

public List<Question> Questions { get; set; } 

在下載JSON字符串完成設置CurrentQuestion第一個問題,而所有問題存放在Questions

var rootObject = JsonConvert.DeserializeObject<RootObject>(e.Result); 
val = rootObject.device_id; 
//store all questions 
Questions = rootObject.questions; 

DisplayCurrentQuestion(); 

重構您的代碼顯示問題到函數(DisplayCurrentQuestion()),所以我們可以重複使用它的下一個顯示問題:

private void DisplayCurrentQuestion() 
{ 
    Question ques = Questions[CurrentQuestionIndex]; 
    txtQuestion.Text = ques.questionTitle; 
    rb1.Content = ques.answers[0]answer; 
    rb2.Content = ques.answers[1].answer; 
    rb3.Content = ques.answers[2].answer; 
    rb4.Content = ques.answers[3].answer; 
} 

在「下一步」按鈕單擊了簡單的改變CurrentQuestionIndex到下一個問題並顯示:

CurrentQuestionIndex++; 
if(CurrentQuestionIndex > Questions.Count) 
{ 
    //this is the last question, no next question available 
} 
else DisplayCurrentQuestion(); 

我們如何得到正確答案&答案Id在」提交「按鈕」。

你可以這樣說:

Question ques = Questions[CurrentQuestionIndex]; 
var correctAnswerId = ques.correctAnswerId; 

if(rb1.IsChecked && ques.answers(0).answerId == correctAnswerId) 
{ 
    //selected answer is correct answer 
} 
//else check next radio button 
else if(rb2.IsChecked && ques.answers(1).answerId == correctAnswerId) 
{ 
    //selected answer is correct answer 
} 
.... 
.... 

注意周圍有另一種方式做同樣的數據綁定和下面的MVVM模式,因此可以考慮,因爲當前的代碼不使用數據更改標題綁定,這個答案也沒有使用數據綁定。

+0

謝謝你理解我的問題。我從這個概念中得到了答案 – rr11