gpt4 book ai didi

c# - 如何使用 wpf mvvm 在表单中生成(绑定(bind))测验

转载 作者:行者123 更新时间:2023-12-03 10:27:42 26 4
gpt4 key购买 nike

如何使用 MVVM 在 WPF 应用程序中将测验与不同类型的问题结合起来?

QuizPageViewModel:

   public class QuizPageViewModel : ViewModelBase
{
public QuizPageViewModel()
{
QuizCollection = new ObservableCollection<QuizQuestion>();

}

public ObservableCollection<QuizQuestion> QuizCollection { get; set; }}

在哪里 问答题 : - EF 实体
 public partial class QuizQuestion
{
public QuizQuestion()
{
QuizAnswers = new HashSet<QuizAnswer>();
QuizMultiQuestions = new HashSet<QuizMultiQuestion>();
}

public long Id { get; set; }

public int QuizId { get; set; }

***public String Type { get; set; }***

[Required]
public string Name { get; set; }
}

问题 输入 可以是真假、多选、多选等类型

xml :
  <ItemsControl ItemsSource="{Binding QuizCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>

<ListBox ItemsSource="{Binding Path=QuizAnswers}"
VerticalAlignment="Stretch"
Background="Transparent">
<ListBox.ItemTemplate>
<ItemContainerTemplate>

<RadioButton GroupName="{Binding Id}"
Content="{Binding Name}" />
</ItemContainerTemplate>
</ListBox.ItemTemplate>
</ListBox>

</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

此 xaml 代码仅显示测验的单选按钮问题。如何绑定(bind)和显示其他 输入 问题(复选框,组合框,文本框)?帮助)))

最佳答案

您可以在项目控件中使用项目模板选择器来根据问题显示不同的控件/模板。

在下面的代码中,您可以看到有一个条件语句检查问题的类型并根据问题的类型返回一个模板。

  public class QuiztemplateSelector : DataTemplateSelector
{
public DataTemplate TrueOrFalseTemplate { get; set; }
public DataTemplate MultiAnswerTemplate { get; set; }
public DataTemplate MultiChoiceTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var question = item as QuizQuestion;
if (question.Type.Equals("TruOrFalse"))
return TrueOrFalseTemplate;
else if (question.Type.Equals("MultiAnswer"))
return MultiAnswerTemplate;
else if ("MultiChoice")
return MultiChoiceTemplate;

return null; //Or your default Template.
}
}

现在在您的 xaml 中,您可以为问题类型(即真/假、多选、多答案)创建模板。然后您需要将这些模板传递给 QuiztemplateSelector,如下所示。
 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<DataTemplate x:Key="TrueOrFalse">
<!-- Write your True or false template here-->
</DataTemplate>
<DataTemplate x:Key="MultiChoice">
<!-- Write your MultiChoice template here-->
</DataTemplate>
<DataTemplate x:Key="MultiAnswer">
<!-- Write your multianswer Template here -->
</DataTemplate>
<local:QuizTemplateSelector x:Key="QuizTemplateSelector"
MultiAnswerTemplate="{StaticResource MultiAnswer}"
TrueOrFalseTemplate="{StaticResource TrueOrFalse}"
MultiChoiceTemplate="{StaticResource MultiChoice}" />
</Grid.Resources>
<ItemsControl ItemsSource="{Binding QuizCollection}" ItemTemplateSelector="{StaticResource QuiztemplateSelector}">
<ItemsControl.ItemTemplate>
<DataTemplate>

<ListBox ItemsSource="{Binding Path=QuizAnswers}"
VerticalAlignment="Stretch"
Background="Transparent">
<ListBox.ItemTemplate>
<ItemContainerTemplate>

<RadioButton GroupName="{Binding Id}"
Content="{Binding Name}" />
</ItemContainerTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>

您可以阅读更多关于 DataTemplateSelector here .

关于c# - 如何使用 wpf mvvm 在表单中生成(绑定(bind))测验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com