Mvvm 如何绑定Silverlight datagrid行中的单选按钮并读取Viewmodel中每行的选定值
我有一个datagrid,每行有一列中的一组单选按钮。我使用listbox数据模板绑定了这些单选按钮,以动态生成单选按钮 以下是模板的代码: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
<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吗?实际上,为每一行生成的单选按钮是动态的,每一行可能有不同的单选按钮集。在这种情况下我能做什么。如果您有任何问题,请告诉我。