0

我有一个数据网格,每一行在 1 列中有一组单选按钮。我已经使用列表框数据模板绑定了这些单选按钮以动态生成单选按钮。

这是模板的代码:

<data:DataGrid   x:Name="formTemplate" AutoGenerateColumns="False" GridLinesVisibility="All" HeadersVisibility="All"  ItemsSource="{Binding Path=FormFieldInformation,Mode=TwoWay}"  >
  <data:DataGrid.Columns>
       <data:DataGridTemplateColumn DisplayIndex="1">
              <data:DataGridTemplateColumn.CellTemplate>
                 <DataTemplate>
                      <StackPanel>
                          <RadioButton GroupName="GN1" Content="From" Width="50" 
                                HorizontalAlignment="Left" VerticalAlignment="Center"/>
                       </StackPanel>
                  </DataTemplate>
               </data:DataGridTemplateColumn.CellTemplate>
       </data:DataGridTemplateColumn>
   <data:DataGrid.Columns>
 </data:DataGrid>

但是这里有两个问题: 1.我只能在为整个数据网格生成的所有单选按钮中选择一个单选按钮。我想每行选择一个单选按钮。2. 如何在 ViewModel 中获取选中的单选按钮值?

任何建议都提前表示赞赏。

谢谢。

4

1 回答 1

1

(对不起,我的英语不好)

GroupName1)您需要为每个RadioButton集合赋予唯一性。我认为最简单的方法是将 绑定GroupName到您将数据网格绑定到的类上的属性。例如,假设你有这个类:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Radio1IsChecked { get; set; }
    public bool Radio2IsChecked { get; set; }
}

其中“Id”是唯一的,将其绑定到 ,GroupName以便每一行都有不同的行。

2)要获得检查值,您必须将 绑定RadioButton IsChecked到您的类上的属性。使用上面的类,它会是这样的:

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <RadioButton GroupName="{Binding Id}" Content="From" IsChecked="{Binding Radio1IsChecked,Mode=TwoWay}"/>
        <RadioButton GroupName="{Binding Id}" Content="To" IsChecked="{Binding Radio2IsChecked,Mode=TwoWay}"/>
    </StackPanel>
</DataTemplate>

编辑1

我假设您发布的 XAML 代码不是您正在运行的实际代码,对吧?试试这个CellTemplate

<DataTemplate>
<StackPanel>
    <TextBlock Text="{Binding Name}"/>
    <ItemsControl ItemsSource="{Binding Radios}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <RadioButton GroupName="{Binding GroupName}" Content="{Binding Name}" IsChecked="{Binding IsChecked,Mode=TwoWay}"/>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

现在你的班级必须是这样的:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Radio> Radios { get; set; }
}


public class Radio
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsChecked { get; set; }
    public string GroupName { get; set; }   
}

现在您可以拥有多个 RadioButtons(只需将它们添加到 Item.Radios 列表中)。

那对你有用吗?

于 2012-05-01T18:37:57.783 回答