我正在使用Visual Studio 2015 Update 1构建一个MVVM Light WPF应用程序。我有以下两个搜索字段:
下面是相关的XAML代码:
当应用程序加载时,它立即在字段旁边显示错误,说明它们不能为空。然而,我需要仅在用户单击“搜索”按钮时对它们进行验证。我该怎么做?谢谢。
cmbSearchColumn
和txtSearchValue
。当用户单击搜索按钮时,这两个字段都不能为空。请注意,我已为两个字段设置了ValidationRules
。下面是相关的XAML代码:
<TextBlock Grid.Row="1"
Grid.Column="0"
Style="{StaticResource FieldLabel}">
Search Column
</TextBlock>
<StackPanel Grid.Row="1"
Grid.Column="1"
Style="{StaticResource ValidationStackPanel}">
<ComboBox x:Name="cmbSearchColumn"
DisplayMemberPath="MemberName"
IsEditable="True"
ItemsSource="{Binding SearchColumns}"
SelectedValuePath="MemberValue"
Style="{StaticResource ComboBoxStyle}">
<ComboBox.SelectedItem>
<Binding Mode="TwoWay"
Path="SelectedColumn}"
UpdateSourceTrigger="Explicit">
<Binding.ValidationRules>
<helpers:NotEmptyStringValidationRule
Message="Search Column cannot be blank." ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</ComboBox.SelectedItem>
</ComboBox>
<TextBlock Style="{StaticResource FieldLabelError}"
Text="{Binding (Validation.Errors)[0].ErrorContent, ElementName=cmbSearchColumn}" />
</StackPanel>
<TextBlock Grid.Row="2"
Grid.Column="0"
Padding="0 0 9 9"
Style="{StaticResource FieldLabel}">
Search Value
</TextBlock>
<StackPanel Grid.Row="1"
Grid.Column="1"
Style="{StaticResource ValidationStackPanel}">
<TextBox x:Name="txtSearchValue" Style="{StaticResource FieldTextBox}">
<TextBox.Text>
<Binding Mode="TwoWay"
Path="SearchValue"
UpdateSourceTrigger="Explicit">
<Binding.ValidationRules>
<helpers:NotEmptyStringValidationRule
Message="Search Value cannot be blank." ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBlock Style="{StaticResource FieldLabelError}"
Text="{Binding (Validation.Errors)[0].ErrorContent, ElementName=txtSearchValue}" />
</StackPanel>
<Button Grid.Row="4"
Grid.Column="1"
Command="{Binding SearchEmployeesRelayCommand}"
Content="Search"
Style="{StaticResource FieldButton}" />
当应用程序加载时,它立即在字段旁边显示错误,说明它们不能为空。然而,我需要仅在用户单击“搜索”按钮时对它们进行验证。我该怎么做?谢谢。
ICommand.CanExecute()
函数来禁用搜索按钮(当验证条件失败时返回false)- 你还应该订阅你正在使用的属性的视图模型更改,并相应地引发ICommand.CanExecuteChanged
。 - MaverikValidatesOnTargetUpdated
设置为False
可以防止程序加载时进行第一次验证。 - Yusuf Tarık Günaydın