属性中的错误消息

时间:2015-06-04 16:26:43

标签: wpf vb.net data-binding properties

这是我的问题。如果用户在文本框中键入数字是正确的,但如果他键入char,我在属性中看不到messagebox()。 为什么?

<TextBox HorizontalAlignment="Left" 
         TabIndex="12" 
         Text="{Binding Time_HH, UpdateSourceTrigger=PropertyChanged,StringFormat='{}{##}'}" 
         FlowDirection="RightToLeft"  
         MaxLength ="2" 
         Height="30" 
         Width="30" />

这是属性

Private _Time_HH As Integer

Public Property Time_HH() As Integer
    Get
        Return _Time_HH
    End Get
    Set(value As Integer)
        For i = 0 To Len(value.ToString)
            If IsNumeric(value.ToString(i)) = False Then
                MessageBox.Show("Error")
                value = 0
            End If
        Next

        _Time_HH = value
        OnPropertyChanged("Time_HH")
    End Set
End Property

1 个答案:

答案 0 :(得分:1)

您的Time_HH属性是一个整数,但它不会包含非数字字符。

最多会发生的是,由于类型不匹配,您的Binding会失败(您的TextBox是否显示红色轮廓?)

如果您想检查您的用户是否输入了非数字字符,您必须使用允许这样的类型:字符串。

试试这个:

Private _Time_HH As Integer
Public Property Time_HH() As String
    Get
        Return _Time_HH.ToString()
    End Get
    Set(value As String)
        For i = 0 To Len(value)
            If IsNumeric(value.ToString(i)) = False Then
                MessageBox.Show("Error")
                value = 0
            End If
        Next

        _Time_HH = Integer.Parse(value)
        OnPropertyChanged("Time_HH")
    End Set
End Property

如果需要使用数值,请使用“整数”字段。您可以创建一个Integer类型的第二个属性,它只是公开该字段,如果您想将它用于另一个Binding或类似的东西(记得也为该属性引发OnPropertyChanged,那么,在{{1 } setter)

注意 - 如果用户键入类似&#34; 00,01-2,0&#34;的内容,上面的代码将引发异常。 Time_HH为该字符串中的所有字符返回IsNumeric,但这并不意味着它是正确的数字。

在我看来,这样做会更好:

True

对不起,如果我犯了一些错误,我通常用C#编写代码,而我的VB很生锈:P