首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多列列表视图中的单选按钮分组

多列列表视图中的单选按钮分组
EN

Stack Overflow用户
提问于 2019-05-29 22:16:22
回答 1查看 180关注 0票数 0

我有一个包含3列的列表视图: 1.文本列2.单选按钮3.单选按钮

我试图将两个单选按钮组合在一起,但所有的单选按钮都在一个组中。例如,如果有两个listview项(两行),那么所有的4个单选按钮将被分组为一个。

代码语言:javascript
运行
复制
<ListView Name="ruleListView"  ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                    ScrollViewer.VerticalScrollBarVisibility="Auto" 
 Margin="10">
                <ListView.View>
                    <GridView>
                        <GridView.ColumnHeaderContainerStyle>
                            <Style TargetType="{x:Type GridViewColumnHeader}">
                                <Setter Property="IsEnabled" Value="False"/>
                            </Style>
                        </GridView.ColumnHeaderContainerStyle>
                        <GridViewColumn 
                                Header="Rule"

                                >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock 
                                        HorizontalAlignment="Right"
                                        Width="410"
                                        TextWrapping="Wrap" Text="{Binding Rule}" TextAlignment="Left"
                                        />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn 
                                Header="Configuration Key"
                            Width="140"

                                >

                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                        <RadioButton GroupName="Rule"
                                                     VerticalAlignment="Center" 
                                                     HorizontalAlignment="Center" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn 
                                Header="Event"
                                Width="100"
                                >
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                        <RadioButton GroupName="Rule"
                                                 VerticalAlignment="Center" 
                                                 HorizontalAlignment="Center" 
                                                 IsChecked="True"
                                                 />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>

我希望应该按照特定的行进行分组。

EN

回答 1

Stack Overflow用户

发布于 2019-05-31 21:49:43

据我所知,RadioButton.GroupName适用于所有活动控件。这就是为什么你会看到所有的单选按钮链接在一起。为了链接每一行,您需要为每一行提供一个惟一的GroupName。在MVVM中,您可以将GroupName绑定到基础项上的属性,或者将RadioButton的IsChecked属性绑定到ViewModel并在代码中管理切换。

因为您没有使用ViewModels,所以它有点复杂。您仍然需要为每行创建一个惟一的GroupName。我能想到的最简单的方法就是使用IValueConverter来获取行索引。

代码语言:javascript
运行
复制
public class RadioGroupIndexConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is ListViewItem lvi)
        {
            var listView = ItemsControl.ItemsControlFromItemContainer(lvi);
            var index = listView.ItemContainerGenerator.IndexFromContainer(lvi);
            return string.Format("{0}{1}", parameter, index);
        }
        return parameter;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后,您需要使用转换器将GroupName绑定到ListViewItem。

首先,您需要将转换器添加为xaml中的资源。其中

代码语言:javascript
运行
复制
<ListView.Resources>
    <converters:RadioGroupIndexConverter x:Key="GroupConverter"/>
</ListView.Resources>

然后,您将更改RadioButton.GroupName以使用相对绑定。

代码语言:javascript
运行
复制
<RadioButton GroupName="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Converter={StaticResource GroupConverter}}"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56362697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档