单选按钮的验证规则wpf
本文关键字:wpf 规则 验证 单选按钮 | 更新日期: 2023-09-27 18:27:58
我在ItemsControl
中有一个RadioButton
。默认情况下,单选按钮将被取消选中。如果在另一个屏幕中配置了特定值(字符串值),我希望用户选择其中一个单选按钮。我需要对其应用验证规则。如果用户没有选择任何一个单选按钮,那么在单击提交按钮时,我应该显示验证错误。
XAML
<StackPanel Grid.Row="1" Visibility="{Binding Path=IsUpdateSendDateConfigured}" Orientation="Horizontal" Margin="0,2,0,0">
<TextBlock Text="{Binding Path=UpdateSendDate, UpdateSourceTrigger=PropertyChanged}" FontWeight="Bold" FontSize="12" Width="400" TextWrapping="WrapWithOverflow" />
<ItemsControl Name="updateSendDateLevelItemsControl" ItemsSource="{Binding UpdateSendDateLevel}" Margin="10,5,0,10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton Height="25" GroupName="updateSendDateLevel" IsChecked="{Binding Selected, ValidatesOnDataErrors=True}" Padding="10,0,10,0" > <!--Need to apply Validation rule here -->
<TextBlock Text="{Binding Description}"/>
</RadioButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
UpdateSendDateLevel是我正在控制器中更新的视图模型。
if (!string.IsNullOrEmpty(configuredUpdateDueDateSelection))
{
UpdateSendDateViewModel updateSendDateLevelViewModel = null;
foreach (SendDate value in Enum.GetValues(typeof(SendDate)).Cast<SendDate>())
{
updateSendDateLevelViewModel = new UpdateSendDateViewModel();
updateSendDateLevelViewModel.UpdateSendDateLevel = value;
updateSendDateLevelViewModel.Description = EnumHelper.GetDescription(value);
m_sendDataContext.UpdateSendDateLevel.Add(updateSendDateLevelViewModel);
}
}
有人能帮助添加xaml侧验证规则吗?或者为我指明正确的方向?
如果你需要任何其他细节,请告诉我。
ValidationRules可以添加为Binding属性的扩展,如下所示:
<RadioButton>
<TextBlock Text="{Binding Description}"/>
<RadioButton.IsChecked>
<Binding Path="Selected" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<rules:YourValidationRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
</RadioButton.IsChecked>
</RadioButton>
(请注意,如果您所做的只是将文本放入块中,则实际上不需要使用TextBlock。您只需在RadioButton的Content="字段中包含该文本绑定即可。)
然后,您还需要定义一个从ValidationRule继承并重写公共ValidationResult Validate(对象值,CultureInfo CultureInfo)的对象(YourValidationRule),并向存在自定义ValidationRule的命名空间添加静态引用(在本例中为规则)。
MSDN上有一个关于ValidationRules的深入教程,链接如下:http://msdn.microsoft.com/en-us/library/ms753962%28v=vs.110%29.aspx
然而,Miiko是正确的——您可以更容易地使用实现ICommand的对象,并使用CanExecute来确定客户是否可以继续。这样做的主要缺点是,出现重影、无法使用的按钮不一定能交流,你应该小心确保你的客户理解他们无法使用该按钮的原因。