我的问题是以下答案的扩展。它指出单选按钮的GroupName范围很广,通常最好只让容器自动分配GroupName。

https://stackoverflow.com/a/6062697/907920

如果我使用静态GroupName,则所有RadioButton共享该组。 (如链接中所示的答案。)

但是,如果我不使用GroupName,则每个单独的RadioButton都会被视为单独位于一个组中。为了自动分配GroupName,我只能假设它使用DataTemplate或CellTemplate作为其“父级”。

我在StackPanel中有一个问题列表。每个问题都显示在UserControl中。每个问题都包含一个答案的ListView。每个Answer都有一个 bool 属性,指示已选择答案,该属性绑定(bind)到DataTemplate内部的RadioButton。

我的XAML精简版如下

    <ListView ItemsSource="{Binding AnswerList}" >
      <ListView.View>
        <GridView>
          <!-- Other columns here -->
          <GridViewColumn>
            <GridViewColumn.CellTemplate>
              <DataTemplate>
                <RadioButton IsChecked="{Binding Path=AnswerChecked}" />
              </DataTemplate>
            </GridViewColumn.CellTemplate>
          </GridViewColumn>
        </GridView>
      </ListView.View>
    </ListView>

我认为除了使用ListView之外,我没有其他选择,因为我需要能够打开和关闭其他列,还需要显示两个或多个答案。

有没有办法告诉单选按钮,它是UserControl的一部分,而不是出于其GroupName的目的,而是DataTemplate的一部分?

我考虑过为每个UserControl分配一个GUID,并将RadioButtons的GroupName绑定(bind)到GUID的字符串,但这似乎过于繁琐。

编辑:为了便于引用,UI如下所示,括号中为我的注释:

(与问题集合绑定(bind)的问题堆栈面板)
  • 问题控件(包含绑定(bind)到答案“|”定界列集合的ListView)
  • [] |答案1(带有文本“答案1”的未选中答案对象)
  • [] |答案2
  • [*] |答案3(带有文本“答案3”的选中答案对象)
  • 谁是第16任总统
  • [] |卡尔·马克思
  • [*] |亚伯拉罕·林肯
  • [] |理查德·尼克松
  • 一摩尔氢的重量是多少
  • [] | 10克
  • [] | .1g
  • [] | 1克
  • 最佳答案

    你应该能够摆脱这样的事情

     <RadioButton GroupName="{Binding}" IsChecked="{Binding Path=AnswerChecked}" />
    

    这应该将它们全部组合在一起。

    如果ListView是QuestionControl的一部分,为什么不绑定(bind)QuestionText,因为问题应该是唯一的
    <RadioButton GroupName="{Binding Path=TheQuestionText}" IsChecked="{Binding Path=AnswerChecked}" />
    

    您可能需要使用FindAncestorQuestioncontrol访问您的DataTemplate
     <RadioButton GroupName="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type QuestionControl}}, Path=QuestionText"}  />
    

    10-08 12:27