单选按钮的验证规则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侧验证规则吗?或者为我指明正确的方向?

如果你需要任何其他细节,请告诉我。

单选按钮的验证规则wpf

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来确定客户是否可以继续。这样做的主要缺点是,出现重影、无法使用的按钮不一定能交流,你应该小心确保你的客户理解他们无法使用该按钮的原因。