单选按钮的验证规则wpf

时间:2014-10-27 20:35:20

标签: c# wpf binding radio-button wpf-controls

我在RadioButton内有一个ItemsControl。默认情况下,将取消选中单选按钮。如果在另一个屏幕中配置了特定值(字符串值),我希望用户选择任一单选按钮。我需要为此应用验证规则。如果用户选择任一单选按钮,则单击提交按钮时,我应显示验证错误。

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边验证规则或指向正确的方向吗?

如果您需要任何其他详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

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。你可以在Content =&#34中包含该文本绑定;&#34; RadioButton上的字段。)

然后,您还需要定义一个继承自ValidationRule的对象(YourValidationRule)并覆盖公共ValidationResult Validate(对象值,CultureInfo cultureInfo),并在命名空间中添加静态引用(在本例中为规则)您的自定义ValidationRule存在。

在此链接上,MSDN上存在ValidationRules的深入教程:http://msdn.microsoft.com/en-us/library/ms753962%28v=vs.110%29.aspx

但是,Miiko是正确的 - 您可能更容易使用实现ICommand的对象,并使用CanExecute来确定客户是否可以继续。这样做的主要缺点是,幻影,无法使用的按钮不一定是交流的,您应该小心确保您的客户理解他们无法使用按钮的原因。