2014-08-27 38 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而不是页面的代码后面,它应该很容易遍历列表并检索所有答案...

相关问题