Mvvm 如何绑定Silverlight datagrid行中的单选按钮并读取Viewmodel中每行的选定值

Mvvm 如何绑定Silverlight datagrid行中的单选按钮并读取Viewmodel中每行的选定值,mvvm,silverlight-4.0,wpfdatagrid,Mvvm,Silverlight 4.0,Wpfdatagrid,我有一个datagrid,每行有一列中的一组单选按钮。我使用listbox数据模板绑定了这些单选按钮,以动态生成单选按钮 以下是模板的代码: <data:DataGrid x:Name="formTemplate" AutoGenerateColumns="False" GridLinesVisibility="All" HeadersVisibility="All" ItemsSource="{Binding Path=FormFieldInformation,Mode=TwoWa

我有一个datagrid,每行有一列中的一组单选按钮。我使用listbox数据模板绑定了这些单选按钮,以动态生成单选按钮

以下是模板的代码:

<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.在为整个datagrid生成的所有单选按钮中,我只能选择一个单选按钮。我想每行选择一个单选按钮。 2.如何在ViewModel中获取选定的单选按钮值

如有任何建议,请提前告知

谢谢。

(很抱歉我的英语不好)

1) 您需要为每个
RadioButton
集合指定一个唯一的
GroupName
。我认为最简单的方法是将
GroupName
绑定到要绑定datagrid的类上的属性。例如,假设您拥有该类:

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
,以便每一行都有一个不同的Id

2) 要获得选中的值,您必须将
单选按钮
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>
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; }   
}

现在你的课程必须是这样的:

<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>
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; }   
}
公共类项目
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表无线电{get;set;}
}
公共广播电台
{
公共int Id{get;set;}
公共字符串名称{get;set;}
已检查公共布尔值{get;set;}
公共字符串组名{get;set;}
}
现在您可以有多个单选按钮(只需将它们添加到Item.Radios列表中)


这对你有用吗?

你能解释下半部分吗:在视图模型中读取所选单选按钮的值。你的
FormFieldInformation
是一个项目列表,对吗?在该item类上,需要有一个布尔属性才能绑定到RadioButton。对于每个单选按钮,您将需要一个属性。在我的示例中,我将
Radio1IsChecked
Radio2IsChecked
绑定到我的视图。当用户检查收音机时,类的属性将更改。您能向类显示您正在绑定到dataGrid吗?实际上,为每一行生成的单选按钮是动态的,每一行可能有不同的单选按钮集。在这种情况下我能做什么。如果您有任何问题,请告诉我。