我有一个标签控件绑定到一个可观察的集合。每个选项卡显示一个单选按钮组。更改选项卡时,由于某种原因,它会取消选择所选的单选按钮。
可观察集合中的每个项目都会将所选单选按钮存储为自己的选项卡。我相信这意味着他们不能互相干扰。我也认识到每组只能选择一个单选按钮。然而,每个标签都在自己的组中。选项卡更改时,为什么选中的单选按钮会被更改?
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;
}
}
答案 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!
您的复选框需要一个唯一的名称 。但是,据我所知,没有方法将名称绑定到属性。总之,我个人认为你必须单独创建每个标签控件,并为复选框指定唯一的名称。
希望它有所帮助!