选定的选项卡更改时,选定的单选按钮也会更改

Selected radio button is changed when selected tab is changed

我有一个绑定到可观察集合的选项卡控件。每个选项卡显示一个单选按钮组。更改选项卡时,由于某种原因,它会取消选择所选的单选按钮。

observable 集合中的每一项都存储为其自己的选项卡选择的单选按钮。我相信这意味着他们不能互相干扰。我还认识到每组只能选择一个单选按钮。然而,每个选项卡都在其自己的组中。为什么在选项卡更改时选择的单选按钮也会更改?

XAML

<TabControl x:Name="MainTabControl" >
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding TabName}"></TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="1*" />
                    <ColumnDefinition Width="1*" />
                    <ColumnDefinition Width="1*" />
                </Grid.ColumnDefinitions>
                <RadioButton x:Name="RadioButtonX"
                             Grid.Column="0"
                             VerticalAlignment="Center"
                             Content="X"
                             IsChecked="{Binding XChecked}" />
                <RadioButton x:Name="RadioButtonY"
                             Grid.Column="1"
                             VerticalAlignment="Center"
                             Content="Y"
                             IsChecked="{Binding YChecked}" />
                <RadioButton x:Name="RadioButtonZ"
                             Grid.Column="2"
                             VerticalAlignment="Center"
                             Content="Z"
                             IsChecked="{Binding ZChecked}" />
            </Grid>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

C#

public partial class MainWindow
{
    public ObservableCollection<RadioButtonSettings> listOfButtonSettings { get; set; }

    public MainWindow()
    {
        listOfButtonSettings = new ObservableCollection<RadioButtonSettings>
        {
            new RadioButtonSettings {TabName = "tab1"},
            new RadioButtonSettings {TabName = "tab2"},
            new RadioButtonSettings {TabName = "tab3"}
        };

        InitializeComponent();
       MainTabControl.ItemsSource = listOfButtonSettings;
    }
}

public class RadioButtonSettings
{
    public string TabName { get; set; }
    public bool XChecked { get; set; }
    public bool YChecked { get; set; }
    public bool ZChecked { get; set; }

    public RadioButtonSettings()
    {
        XChecked = true;
    }
}

我可以说每个选项卡的单选按钮名称都是相同的。因此,当您在 tab2 上设置 Y 时,X 将在 tab2 上取消选中,但因为它在 tab1 上具有相同的名称,所以也将取消选中!此外,如果您 select 在选项卡 1 上勾选 Y,当您更改选项卡时,Y 将自动取消选中,因为在每个选项卡上,首先,X 是 selected!

您的复选框需要一个唯一的名称。但是,据我所知,没有将名称绑定到 属性 的方法。总之,我个人的意见是,您必须单独创建每个选项卡控件,并为复选框指定唯一的名称。

希望对您有所帮助!

这个问题描述here

解决方法是使用上面 link 中所写的 RadioButtonExtended class。然后,您可以将 XAML 更改为以下内容,它将按预期工作:

 <RadioButtonExtended x:Name="RadioButtonX"
     Grid.Column="0"
     VerticalAlignment="Center"
     Content="X"
     IsCheckedReal="{Binding XChecked}" />
 <RadioButtonExtended x:Name="RadioButtonY"
     Grid.Column="1"
     VerticalAlignment="Center"
     Content="Y"
     IsCheckedReal="{Binding YChecked}" />
 <RadioButtonExtended x:Name="RadioButtonZ"
     Grid.Column="2"
     VerticalAlignment="Center"
     Content="Z"
     IsCheckedReal="{Binding ZChecked}" />