我有一个数据网格,每行在 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. 如何在视图模型中获取选定的单选按钮值?
任何建议都欢迎提前提出。
谢谢。
(对不起,我的英语不好)
1)您需要为每个RadioButton
集提供唯一的GroupName
。我认为最简单的方法是将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; }
}
现在,您可以拥有多个单选按钮(只需将它们添加到 Item.Radios 列表中)。
这对你有用吗?