我在itemscontrols中有多个比率按钮,并且数据模板绑定到MVVM / prism应用程序中的数据库数据。每组单选按钮都相应地按名称分组,以便它们是单独的组。
我遇到的问题(违反了单选按钮的惯例)是你可以在组中选择多个选项。并非所有选项都允许多项选择。有些人表现得像别人没有的那样。在通过窥探检查时,所有单选按钮都属于同一组,但有多个按钮报告为IsChecked。
有什么想法吗?
由于
编辑 - 代码
XAML
<StackPanel Grid.Column="0" Margin="10,0,0,10">
<TextBlock Margin="5,5,0,5"
FontSize="16"
FontWeight="Bold"
Foreground="{Binding Path=ThemeBackground}"
Text="From" />
<ItemsControl ItemsSource="{Binding Path=InternetItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton Margin="5"
Content="{Binding Path=Title}"
GroupName="InternetFrom"
IsChecked="{Binding Path=IsSelected}"
IsEnabled="{Binding Path=IsEnabled}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
查看模型
public ObservableCollection<Item> InternetItems
{
get
{
return
new ObservableCollection<Item>(
_items.Where(x => x.Category == Category.InternetFrom).OrderBy(x => x.DisplayOrder));
}
}
编辑 -
问题已解决。后面的代码是每次选择单选按钮时启动一个新的可观察集合,导致多个datacontexts,无论单选按钮的组名是否相同
答案 0 :(得分:3)
RadioButton
控件共享相同的容器(例如,来自Panel
或ContentControl
的任何内容),则它们是相互排斥的。在您的情况下,ItemsControl
中生成的每个项目都是一个单独的容器,因此按钮不会自动互斥。
例如:
如果你的ItemsControl
设置如下,按钮是互斥的:
<ItemsControl>
<RadioButton Content="1" />
<RadioButton Content="2" />
<RadioButton Content="3" />
<RadioButton Content="4" />
</ItemsControl>
但这不是:
<ItemsControl>
<Grid>
<RadioButton Content="1" />
</Grid>
<Grid>
<RadioButton Content="2" />
</Grid>
<Grid>
<RadioButton Content="3" />
</Grid>
<Grid>
<RadioButton Content="4" />
</Grid>
</ItemsControl>
正如迪恩所说,分配相同的GroupName
财产将解决您的问题。
<ItemsControl>
<Grid>
<RadioButton Content="1"
GroupName="Group1" />
</Grid>
<Grid>
<RadioButton Content="2"
GroupName="Group1" />
</Grid>
<Grid>
<RadioButton Content="3"
GroupName="Group1" />
</Grid>
<Grid>
<RadioButton Content="4"
GroupName="Group1" />
</Grid>
</ItemsControl>
修改强>
如果您有多个ItemsControl
,则可以在每个GroupName
中为RadioButton
设置不同的ItemsControl
。在这种情况下,范围内的默认样式会派上用场:
<StackPanel>
<ItemsControl>
<ItemsControl.Resources>
<Style TargetType="{x:Type RadioButton}">
<Setter Property="GroupName"
Value="Group1" />
</Style>
</ItemsControl.Resources>
<Grid>
<RadioButton Content="1" />
</Grid>
<Grid>
<RadioButton Content="2" />
</Grid>
<Grid>
<RadioButton Content="3" />
</Grid>
<Grid>
<RadioButton Content="4" />
</Grid>
</ItemsControl>
<ItemsControl>
<ItemsControl.Resources>
<Style TargetType="{x:Type RadioButton}">
<Setter Property="GroupName"
Value="Group2" />
</Style>
</ItemsControl.Resources>
<Grid>
<RadioButton Content="1" />
</Grid>
<Grid>
<RadioButton Content="2" />
</Grid>
<Grid>
<RadioButton Content="3" />
</Grid>
<Grid>
<RadioButton Content="4" />
</Grid>
</ItemsControl>
</StackPanel>
答案 1 :(得分:2)
你做错了,同一组内的RadioButton
是互斥的。如果您使用GroupName
属性将两个或多个RadioButton
分配给某个群组,则您只能从该群组中选择一个RadioButton
。
RadioButton.GroupName Property
获取或设置指定哪些RadioButton控件的名称 相互排斥。
用户可以在每个组中选择一个RadioButton。
你真的认为你在.NET Framework中发现了这样一个根本没有人报告但又没有修复的错误吗?