这可能是一个简单的答案,但我似乎无法找到它。我的窗口上有一个文本框,它与二进制属性绑定。我有字符串格式= N2以确保有效输入。这是我的xaml:
<TextBox x:Name="tbxAmount"
Text="{Binding ItemAmount, StringFormat=N2, Mode=TwoWay}"
HorizontalAlignment="Left"
Height="23" .....
验证效果很好 - 如果输入无效,则文本框以红色标出,并且绑定类中的属性不会更改。但...
有一个SAVE按钮,然后将对类属性所做的更改保存到我的数据库中。不知何故,在SAVE按钮单击事件中,我需要识别出我的文本框输入无效,因此阻止了数据库更新。必须有一个属性指示我可以引用的文本框上的格式错误,或者我需要做些什么来防止保存?
答案 0 :(得分:1)
所有这些答案都很棒。验证课程让我走上了正确的道路,以解决目前最适合我的方式。
在我的保存点击事件中,我当前在我的项类中运行了一个验证函数,如果有任何验证错误,它会返回一系列消息。然后,如果消息不是空白,则显示错误消息,而不是继续保存功能。
所以我需要做的就是检查GetHasError的结果以获取tbx数量,并包含另一条错误消息,如果它是真的。这是我的Click事件的相关代码...... (VB中的代码,保存“;”s)
Private Sub btnSave_Click(sender As Object, e As RoutedEventArgs) Handles btnSave.Click
Dim tErrors As String = ""
'validate
tErrors = sInvoiceItem.InvoiceItemVerify()
If Validation.GetHasError(tbxAmount) = True Then
tErrors = tErrors + "The amount entered must be a valid number." + Environment.NewLine
End If
If tErrors = Nothing Then ' proceed with save
....
所以我的关键是Validation.GetHasError()函数。感谢大家的投入。
将来,我想更多地使用ViVi和qqww2上面的解决方案来保持XAML中的验证,但是我不确定如何向用户添加消息/反馈的显示。
同样,罗伯特上面的回答解决了防止无效数据被保存的问题,但我不希望让项目类本身向用户发出消息。
答案 1 :(得分:0)
您寻求的财产是func setUpAirPlayView()
{
//Airplay Button
if self.airPlay_PlayBtn == nil
{
let playImage = UIImage(named: "player_play.png")!
if let _ = self.airPlay_PlayBtnFrame
{
self.airPlay_PlayBtn = UIButton(frame: self.airPlay_PlayBtnFrame)
self.airPlay_PlayBtn.setBackgroundImage(playImage, forState: UIControlState.Normal)
self.airPlay_PlayBtn.addTarget(self, action: #selector(ICFPlayerViewController.airPlayButtonAction), forControlEvents: UIControlEvents.TouchUpInside)
self.airPlay_PlayBtn.setBackgroundImage(UIImage(named: "player_play.png"), forState: .Normal)
self.airPlay_PlayBtn.setBackgroundImage(UIImage(named: "player_pause.png"), forState: .Selected)
self.airPlay_PlayBtn.center = self.view.center
self.view.addSubview(self.airPlay_PlayBtn)
if let _ = self.player
{
self.player.playPauseButton.hidden = true
}
}
}
else
{
self.airPlay_PlayBtn.hidden = false
if let _ = self.player
{
self.player.playPauseButton.hidden = true
}
}
// Airplay Label
if self.airPlayLabel == nil
{
self.airPlayLabel = UILabel()
self.airPlayLabel.frame = CGRectMake(0, 0, 280, 20)
self.airPlayLabel.text = "Your video is now playing on Apple TV"
self.airPlayLabel.textAlignment = NSTextAlignment.Center
self.airPlayLabel.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.6)
self.airPlayLabel.textColor = UIColor.whiteColor()
self.airPlayLabel.sizeToFit()
self.airPlayLabel.center = self.view.center
self.airPlayLabel.center.y = self.view.center.y - self.activityIndicator.frame.size.height*1.5
self.view.addSubview(self.airPlayLabel)
}
else
{
self.airPlayLabel.hidden = false
}
// Thumbnail
self.setupContentThumbnailImageView() //Fetch Thumbnail image
if let _ = self.thumbnailImage
{
self.view.addSubview(self.thumbnailImage)
}
self.view.bringSubviewToFront(bottomToolbar)
self.view.bringSubviewToFront(topToolbar)
if let _ = self.airPlayLabel
{
self.view.bringSubviewToFront(self.airPlayLabel)
}
if let _ = self.airPlay_PlayBtn
{
self.view.bringSubviewToFront(self.airPlay_PlayBtn)
}
}
附加财产。当输入无效时,您可以使用此属性禁用按钮。
Validation.HasError
当<Window.Resources>
<local:NegateBooleanConverter x:Key="NegateBooleanConverter"/>
</Window.Resources>
<Button IsEnabled="{Binding ElementName=tbxAmount, Path=(Validation.HasError), Converter={StaticResource NegateBooleanConverter}}"/>
Validation.HasError
true
应为IsEnabled
时,反之亦然。因此应该否定绑定。您可以通过简单的转换器实现此目的:
false
答案 2 :(得分:-1)
你可以使用Contain方法来检查文本是否匹配,请检查以下代码:
private void button_Click(object sender, RoutedEventArgs e)
{
if (textBox.Text.Contains(N2))
{
MessageBox.Show("Item match");
}
else
{
MessageBox.Show("Item does not match");
}
}
答案 3 :(得分:-2)
不是检查无效数据,而是为什么不首先阻止数据设置为无效值?
在您要绑定的属性中,使用'set'方法检查值并在允许之前对其进行格式化。
我已经猜到了你的代码,但想象这样的东西会起作用。这是我用来从文本框中获取数值并确保格式正确的方法。
private double itemAmount;
public string ItemAmount
{
get
{
return itemAmount.ToString("N2");
}
set
{
double temp = 0;
if(Double.TryParse(value, out temp))
{
itemAmount = temp;
}
}
}