2014-08-27 43 views
1

以下代碼將顯示一種數據形式。這裏Textbox和複選框將顯示它的問題數據類型。如果需要問題是/否答覆,將顯示覆選框或需要文本答案,將顯示文本框值。我有至少15個問題我如何從「Button_Click」事件得到這個答案。如何從Listbox中獲取綁定在Windows Phone中的值?

<ListBox Name="formDetails" ItemsSource="{Binding}" Grid.Row="0"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Name="Text"> 
     <TextBlock Name="Txt_Question" 
      Text="{Binding Question, Mode=OneWay}"></TextBlock> 
     <TextBox Name="TxTAnswer" 
      Text="{Binding Stringval, Mode=TwoWay}" 
      Visibility="{Binding DataType, Mode=OneWay, Converter={StaticResource TextConverter}}"></TextBox> 
     <CheckBox Name="BoolVal" 
      IsChecked="{Binding BoolVal, Mode=TwoWay}" 
      Visibility="{Binding DataType, Mode=OneWay, Converter={StaticResource YesNoConverter}}"></CheckBox> 
     </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 
<Button Grid.Row="1" Click="Button_Click" Content="Submit"></Button> 

回答

0

如果您在完整的MVVM方法中,那麼Command屬性似乎更合適。正如在另一個答案中也提出的那樣,你可以將命令綁定到視圖模型中的處理程序,我假定數據位於ListBoxItemsSource,然後其他應該很容易,因爲處理程序和數據處於同一個類中。

反正給你的那一刻和事件處理的XAML,另一種可能的方式是通過訪問ListBoxItemsSource並且將它轉換爲實際的類型:直接

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    //assuming that you're using List of Question class model. 
    var questions = (List<Question>)formDetails.ItemsSource; 
    //for this purpose ObservableCollection is preferable than List btw 
    ..... 
} 
+0

無法鑄成列表。如果我喜歡上面,我得到錯誤無法投入'System.Collections.ObjectModel.ObservableCollection'類型的對象來鍵入'System.Collections.Generic.List'' – Dino 2014-08-28 09:15:06

+0

然後嘗試投射到'(ObservableCollection )'.. – har07 2014-08-28 09:20:49

+0

我做了以下工作。謝謝 列表 GetList =新列表(); foreach(formDetails.ItemsSource中的問題項) {GetList.Add(item);} – Dino 2014-08-28 11:36:04

0

由於您使用數據綁定填充列表及其項目,可以考慮使用命令,而不是點擊事件處理程序:

<Button Grid.Row="1" Command="{Binding SubmitCommand}" Content="Submit"></Button> 

這樣,您就可以處理按鈕按下邏輯在您的Viewmodel而不是頁面的代碼後面,它應該很容易遍歷列表並檢索所有答案...

相關問題