选定的选项卡更改时,选定的单选按钮也会更改
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}" />
我有一个绑定到可观察集合的选项卡控件。每个选项卡显示一个单选按钮组。更改选项卡时,由于某种原因,它会取消选择所选的单选按钮。
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}" />