WPF - 如何使DataTemplate生成的单选按钮互斥?

时间:2009-09-30 00:02:25

标签: wpf xaml listbox radio-button datatemplate

我正在构建的其中一个应用程序需要为用户构建调查。与我的问题相关的相关课程是:

 Survey (string Description, List<Questions> Questions, QuestionTypes Type)
 Question (string Description, List<Choice> Choices)
 Choice (string Description)
 enum QuestionTypes {MultipleChoicesOneAnswer, MultipleChoicesMultipleAnswers}

在ListBox中,我想在自己的边框中显示每个问题以及每个问题的可用选项。像这样:
1)一天有几个小时? [] 21
[] 22
[] 23
[] 24

上面的括号代表一个单选按钮(如果问题类型是“MultipleChoicesOneAnswer”)或复选框(对于类型为“MultipleChoicesMultipleAnswers”的问题)

我使用以下模板:

<DataTemplate x:Key="MultipleChoicesOneAnswerTemplate" DataType="{x:Type local:Choice}">
   <RadioButton Content="{Binding Description}" Foreground="Blue"  />
</DataTemplate>


<DataTemplate x:Key="QuestionTemplate" DataType="{x:Type local:Question}">
   <DockPanel>
      <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
         <TextBlock Text="{Binding SortingIndex}" />
         <TextBlock Text=")" />
         <TextBlock Text="{Binding Description}" Margin="5,0,0,0"/>
      </StackPanel>
      <ListBox ItemTemplate="{StaticResource MultipleChoicesOneAnswerTemplate}" ItemsSource="{Binding Choices}"/>
   </DockPanel>
</DataTemplate>

使用这些模板,每个选项都会得到一个RadioButton,但每个问题并不相互排斥。

我的问题是:

 1.如何使模板生成的RadioButtons互斥?  2.如何将用户选择的选项录制到我的模型中?

非常感谢你的帮助。

更新 遵循csunwold的建议,它使用GroupName,但感觉有点像黑客,因为我必须覆盖在问题类上吐出描述的ToString()并且做了GroupName =“{Binding Question}”。

其他人有什么建议吗?

1 个答案:

答案 0 :(得分:2)

让你想要的单选按钮相互删除相同的GroupName属性。您可以将此记录到模型中,但创建一个枚举类型,每次检查一个单选按钮时都会更新。