如何解决通过动态创建的控件来跟踪值
|| 我有一个WPF应用程序,该应用程序允许用户创建所有不同类型的问题,根据类型,这些问题将使用文本框,组合框,复选框或单选按钮来允许用户在构建某种调查表后回答问题。我的问题是在创建控件并即时创建调查表之后,跟踪所有不同控件的答案的最佳方法是什么。现在,我正在遍历所有容器并根据controlType获取值。哪个工作正常,但我想知道数据绑定还是其他某种方式可以为我提供更好的解决方案。 我对数据绑定的打is是,直到所有内容创建之后,我才有了预期答案或问题的结构,因此每次都可能有所不同。我知道这有点含糊,但是我非常感谢任何人都可以提供的任何帮助。谢谢。解决方法
id创建代表每种类型问题的类(即,需要测试箱答案的类别,用于组合框的类别,等等)。还创建一个datatemplateselector以选择所需的模板,并在xaml中为此选择器创建资源。
类:
public abstract class QuestionType
{
public string Question { get; set; }
}
public class TextBoxQuestion : QuestionType
{
public string Answer { get; set; }
}
public class CheckBoxQuestion : QuestionType
{
public bool Answer { get; set; }
}
public class ComboBoxQuestion : QuestionType
{
public List<string> Values { get; set; }
public string Answer { get; set; }
}
public class QuestionTemplateSelector : DataTemplateSelector
{
public DataTemplate Combo { get; set; }
public DataTemplate Text { get; set; }
public DataTemplate Check { get; set; }
public override System.Windows.DataTemplate SelectTemplate(object item,System.Windows.DependencyObject container)
{
if (item is TextBoxQuestion) return Text;
if (item is ComboBoxQuestion) return Combo;
if (item is CheckBoxQuestion) return Check;
return null;
}
}
实例化代码:
public MainWindow()
{
InitializeComponent();
ObservableCollection<QuestionType> Questions = new ObservableCollection<QuestionType>()
{
new TextBoxQuestion() { Question = \"What\'s your favorite color?\" },new CheckBoxQuestion() { Question = \"Are you allergic to peanuts?\" },new ComboBoxQuestion() { Question = \"How many fingers am I holding up?\",Values = new List<string>() { \"1\",\"2\",\"3\",\"4\",\"6\" }}
};
QuestionList.ItemsSource = Questions;
}
XAML:
<Grid>
<Grid.Resources>
<local:QuestionTemplateSelector x:Key=\"questionSelector\">
<local:QuestionTemplateSelector.Check>
<DataTemplate DataType=\"local:CheckBoxQuestion\">
<StackPanel>
<TextBlock Text=\"{Binding Question}\"/>
<CheckBox IsChecked=\"{Binding Answer}\"/>
</StackPanel>
</DataTemplate>
</local:QuestionTemplateSelector.Check>
<local:QuestionTemplateSelector.Text>
<DataTemplate DataType=\"local:TextBoxQuestion\">
<StackPanel>
<TextBlock Text=\"{Binding Question}\"/>
<TextBox Text=\"{Binding Answer}\"/>
</StackPanel>
</DataTemplate>
</local:QuestionTemplateSelector.Text>
<local:QuestionTemplateSelector.Combo>
<DataTemplate DataType=\"local:ComboBoxQuestion\">
<StackPanel>
<TextBlock Text=\"{Binding Question}\"/>
<ComboBox SelectedValue=\"{Binding Answer}\" ItemsSource=\"{Binding Values}\"/>
</StackPanel>
</DataTemplate>
</local:QuestionTemplateSelector.Combo>
</local:QuestionTemplateSelector>
</Grid.Resources>
<ListBox Name=\"QuestionList\" ItemTemplateSelector=\"{StaticResource questionSelector}\"/>
</Grid>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。