【问题标题】:Mutually exclusive RadioButtons by row and not by column in GridView在 GridView 中按行而不是按列互斥 RadioButtons
【发布时间】:2014-01-15 11:07:27
【问题描述】:

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

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

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

你能建议吗?提前致谢!

克里斯

<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>

【问题讨论】:

    标签: c# wpf xaml gridview


    【解决方案1】:

    如果您可以修改ListView 绑定到的列表中的对象,那么您可以在该对象中添加一个唯一标识该特定对象的属性,仅用于此目的。例如:

    public class DataObject
    {
        public void DataObject()
        {
            Id = Guid.NewGuid();
        }
    
        public Guid Id{ get; private set; }
    }
    

    然后您可以将您的GroupName 绑定到此属性:

    <RadioButton Name="radioToInsert" GroupName="{Binding Id, Mode=OneWay}" />
    

    因为每一行代表你列表中不同的对象,所以这个Id只在1行的范围内共享。

    【讨论】:

    • 有效!!!非常感谢! ...而且我不必修改我的对象,因为列表中的单词已经是唯一的,所以最后绑定字符串是 GroupName="{Binding Word, Mode=OneWay}"。
    猜你喜欢
    • 2011-02-12
    • 2011-01-06
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多