相互排斥的RadioButtons按行排列,而不是GridView中的列 [英] Mutually exclusive RadioButtons by row and not by column in GridView

查看:154
本文介绍了相互排斥的RadioButtons按行排列,而不是GridView中的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

具有5列的GridView:
- 文本
- 单选按钮
- 单选按钮
- 单选按钮
- 复选框

文本列是通过绑定到List<>自动填充的。
关于我需要的单选按钮,它们是按行而不是按列相互排斥的;它们的值由用户交互设置。



如果我像下面的例子那样设置GroupName属性,所有的单选按钮都是按行和按列互斥的。 p>

您能否提供建议?



Chris

 < ListView Grid.Row =0Grid.Column =0Horizo​​ntalAlignment =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中的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆