问题描述
具有5列的GridView:- 文本
- 单选按钮
- 单选按钮
- 单选按钮
- 复选框
文本列是通过绑定到List<>自动填充的。
关于我需要的单选按钮,它们是按行而不是按列相互排斥的;它们的值由用户交互设置。
如果我像下面的例子那样设置GroupName属性,所有的单选按钮都是按行和按列互斥的。 p>
您能否提供建议?
Chris
< ListView Grid.Row =0Grid.Column =0HorizontalAlignment =StretchMargin =0,0,0,0Name =lstWordsVerticalAlignment =Stretch>
< ListView.View>
< GridView>
< GridViewColumn HeaderContainerStyle ={StaticResource MyHeaderStyle}Header =WordDisplayMemberBinding ={Binding Word}/>
< GridViewColumn HeaderContainerStyle ={StaticResource MyHeaderStyle}Header =FrequencyWidth =60DisplayMemberBinding ={Binding Frequency}} />
< GridViewColumn HeaderContainerStyle ={StaticResource MyHeaderStyle}Header =InsWidth =30>
< GridViewColumn.CellTemplate>
< DataTemplate>
< RadioButton Name =radioToInsertGroupName =radioWords/>
< / DataTemplate>
< /GridViewColumn.CellTemplate>
< / GridViewColumn>
< GridViewColumn HeaderContainerStyle ={StaticResource MyHeaderStyle}Header =RepWidth =30>
< GridViewColumn.CellTemplate>
< DataTemplate>
< RadioButton Name =radioToReplaceGroupName =radioWords/>
< / DataTemplate>
< /GridViewColumn.CellTemplate>
< / GridViewColumn>
< GridViewColumn HeaderContainerStyle ={StaticResource MyHeaderStyle}Header =DelWidth =30>
< GridViewColumn.CellTemplate>
< DataTemplate>
< RadioButton Name =radioToDeleteGroupName =radioWords/>
< / DataTemplate>
< /GridViewColumn.CellTemplate>
< / GridViewColumn>
< GridViewColumn HeaderContainerStyle ={StaticResource MyHeaderStyle}Header =InfWidth =30>
< GridViewColumn.CellTemplate>
< DataTemplate>
< CheckBox Name =chkToInflect/>
< / DataTemplate>
< /GridViewColumn.CellTemplate>
< / GridViewColumn>
< / GridView>
< /ListView.View>
如果您可以修改 ListView
绑定到的列表中的对象,那么您可以在该对象中添加一个唯一标识该特定对象的属性,只需以此目的。例如:
public class DataObject
{
public void DataObject()
{
Id = Guid.NewGuid();
}
public Guid Id {get;私人设置; }
}
然后你可以绑定你的 GroupName
b
$ b
< RadioButton Name =radioToInsertGroupName ={Binding Id,Mode = OneWay }/>
由于每行代表列表中的不同对象,因此 Id
仅在1行的范围内共享。
GridView with 5 columns:- text- radiobutton- radiobutton- radiobutton- checkbox
The text column is automatically populated through a binding to a List<>.About the radiobuttons I need they are mutually exclusive by row and not by column; their value is set by user interaction.
If I set the GroupName property like in the following exemple, all the radiobuttons are mutually exclusives both by row and by column.
Could you please advise? Thanks in advance!
Chris
<ListView Grid.Row="0" Grid.Column="0" HorizontalAlignment="Stretch" Margin="0,0,0,0" Name="lstWords" VerticalAlignment="Stretch">
<ListView.View>
<GridView>
<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Word" DisplayMemberBinding="{Binding Word}"/>
<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Frequency" Width="60" DisplayMemberBinding="{Binding Frequency}" />
<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Ins" Width="30">
<GridViewColumn.CellTemplate>
<DataTemplate>
<RadioButton Name="radioToInsert" GroupName="radioWords" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Rep" Width="30">
<GridViewColumn.CellTemplate>
<DataTemplate>
<RadioButton Name="radioToReplace" GroupName="radioWords" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Del" Width="30">
<GridViewColumn.CellTemplate>
<DataTemplate>
<RadioButton Name="radioToDelete" GroupName="radioWords" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Inf" Width="30">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chkToInflect"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
If you can modify the object in the list that the ListView
is binding to, then you can add a property in that object which uniquely identifies that particular object, just for this purpose. For example:
public class DataObject
{
public void DataObject()
{
Id = Guid.NewGuid();
}
public Guid Id{ get; private set; }
}
Then you can bind your GroupName
to this property:
<RadioButton Name="radioToInsert" GroupName="{Binding Id, Mode=OneWay}" />
Because each row represents a different object in your list, so this Id
is only shared in the scope of 1 row.
这篇关于相互排斥的RadioButtons按行排列,而不是GridView中的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!