簡體   English   中英

多列列表視圖中的單選按鈕分組

[英]Radio Button grouping in the multi column list view

我有一個列表視圖,其中包含以下3列:1。文本列2.單選按鈕3.單選按鈕

我正在嘗試將兩個單選按鈕分組,但所有單選按鈕都在一組中。 例如,如果有兩個列表視圖項(兩行),則所有4個單選按鈕被分組為一個。

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

我希望按照特定的行進行分組。

據我了解,RadioButton.GroupName適用於所有活動控件。 這就是為什么你看到所有單選按鈕鏈接在一起的原因。 為了使每一行都被鏈接,每行需要一個唯一的GroupName。 在MVVM中,您可以將GroupName綁定到基礎項上的屬性,或將RadioButton的IsChecked屬性綁定到ViewModel並管理代碼中的切換。

由於您不使用ViewModel,因此它有點復雜。 您仍需要為每行創建唯一的GroupName。 我能想到的最簡單的方法是使用IValueConverter來獲取行索引。

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中的資源。 其中<converters:是對RadioGroupIndexConverter類的命名空間的引用。 如果您在與ListView相同的命名空間中創建了類,則只需使用<local:

<ListView.Resources>
    <converters:RadioGroupIndexConverter x:Key="GroupConverter"/>
</ListView.Resources>

然后,您將更改您的RadioButton.GroupName以使用相對綁定。

<RadioButton GroupName="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Converter={StaticResource GroupConverter}}"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM