У меня есть элемент управления вкладкой, привязанный к наблюдаемой коллекции. На каждой вкладке отображается одна группа переключателей. Когда вкладка изменена, по какой-то причине она отменяет выбор выбранного переключателя.Выбранный переключатель изменяется при изменении выбранной вкладки
Каждый элемент в наблюдаемой коллекции сохраняет выбранный переключатель для своей вкладки. Я считаю, что это означает, что они не могут вмешиваться друг в друга. Я также признаю, что для каждой группы может быть выбран только один переключатель. Тем не менее, каждая вкладка находится в собственной группе. Почему выбранный переключатель изменяется при изменении вкладки?
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;
}
}
Не могу сказать, что я слишком согласен с наследованием. Это может быть разрешено в модели представления, заставив RadioButtonSettings реализовать INotifyPropetyChanged и отменить другие свойства, когда свойство «проверено». Используйте MVVM в своих интересах и управляйте логикой в виртуальной машине –