我在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边验证规则或指向正确的方向吗?
如果您需要任何其他详细信息,请与我们联系。
答案 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来确定客户是否可以继续。这样做的主要缺点是,幻影,无法使用的按钮不一定是交流的,您应该小心确保您的客户理解他们无法使用按钮的原因。