我有一个数据网格,每行在一列中有一组单选按钮。我使用listbox datatemplate绑定了这些单选按钮,以便动态生成Radiobuttons。
以下是模板的代码:
<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中获取所选的radiobuttons值?
任何建议都需要提前感谢。
感谢。
答案 0 :(得分:1)
(抱歉我的英语不好)
1)您需要为每个GroupName
集提供唯一的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>
<强> EDIT1 强>
我说你发布的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; }
}
现在您可以拥有多个RadioButton(只需将它们添加到Item.Radios列表中)。
这对你有用吗?