[英]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.