更改选定选项卡后,将更改所选单选按钮

时间:2015-03-20 19:31:41

标签: c# wpf radio-button tabcontrol

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

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

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

2 个答案:

答案 0 :(得分:1)

此问题已在here

中说明

解决方法是使用上面链接中编写的RadioButtonExtended类。然后,您可以将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}" />

答案 1 :(得分:-1)

我可以说每个标签的单选按钮名称相同。因此,当您在tab2上设置Y时,将在tab2上取消选中X,但由于它在tab1上具有相同的名称,因此也将取消选中!此外,如果您在tab1上选择Y复选框,当您更改选项卡时,Y将自动取消选中,因为在每个选项卡上,首先选择X!

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

希望它有所帮助!