我有一个包含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>我希望应该按照特定的行进行分组。
发布于 2019-05-31 21:49:43
据我所知,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中的资源。其中
<ListView.Resources>
<converters:RadioGroupIndexConverter x:Key="GroupConverter"/>
</ListView.Resources>
然后,您将更改RadioButton.GroupName以使用相对绑定。
<RadioButton GroupName="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Converter={StaticResource GroupConverter}}"/>https://stackoverflow.com/questions/56362697
复制相似问题