我有一个包含以下3列的列表视图: 1.文字栏 2.单选按钮 3.单选按钮
我试图将两个单选按钮归为一组,但所有单选按钮都归为一组。 例如如果有两个listview项(两行),则所有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>
我希望应该按照特定的行进行分组。
答案 0 :(得分:0)
据我了解,RadioButton.GroupName适用于所有活动控件。这就是为什么您看到所有链接在一起的单选按钮的原因。为了使每一行都被链接,您需要为每一行使用唯一的GroupName。在MVVM中,您可以将GroupName绑定到基础项目的属性,或者将RadioButton的IsChecked属性绑定到ViewModel并管理代码中的切换。
由于您不使用ViewModels,因此更加复杂。您仍然需要为每行创建一个唯一的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中的资源。其中 然后,您将更改RadioButton.GroupName以使用相对绑定。<ListView.Resources>
<converters:RadioGroupIndexConverter x:Key="GroupConverter"/>
</ListView.Resources>
<RadioButton GroupName="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Converter={StaticResource GroupConverter}}"/>