2016-12-13 9 views
0

多くのプロパティを持つvehicleというクラスがありますが、私はtmyの問題を説明するために1つだけ使用します。私のクラスには次のコードが含まれています: `Private clsMileage As Longユーザー入力ウィンドウの不要な既定値(VB/wpf)

Public Property Mileage As Long 
    Get 
     Mileage = clsMileage 
    End Get 
    Set(value As Long) 
     clsMileage = value 
    End Set 
End Property 

Public Sub New() 
    clsMileage = vbNull 
End Sub` 

かなり基本的なものです。

<Window.Resources> 
    <local:VehicleExpense x:Key="ve" /> 
</Window.Resources> 
<Grid DataContext="{StaticResource ve}"> 

<TextBox 
     Name="txtMileage" 
     Text="{Binding Path=Mileage}" /> 

ウィンドウが数字0がtxtMileageテキストボックスにある開くと次のように私の入力ウィンドウが設計されたテキストボックスの数を持っています。私はそこにどんな価値も望んでいません。ボックスを空白にして、ユーザーが簡単にデータを入力できるようにします。 VehicleクラスからSub Newを削除すると、数字1がテキストボックスに表示されます。これらの数字はどこから来ていますか?

Iは次のようにモードを設定することにより、結合を変更しようとした: VALUE =「{バインディングパス=マイレージ、MODE = OneWayToSource}」

空白のテキストボックスを維持するために動作しますがウィンドウがテキストボックスを開くときに赤い枠線があります。しかし、私はまだ検証コードを追加していないので、なぜプログラムは検証失敗が起こったと思いますか?あなたの最初の質問については

答えて

0

、値は、Longあるマイレージプロパティを結合しているという事実から来ている - それはあなたのSub NewあなたがvbNullを割り当てるには0

のデフォルト値を持っていることを意味しますそのロングに。 vbNullは値1の定数(Microsoft.VisualBasic.Constants.vbNull)になります。これはおそらくあなたが意味するものではありません。 VB.netの "null"値はNothingですが、Longのフィールドに割り当てることもできません。

2番目の質問では、検証エラーは、バインディングエラーの原因となるLong値に空の文字列( "")を割り当てることができないという事実に起因しています。この問題を解決するには、あなたのバッキングフィールドがNULL可能にすることができます。

Private clsMileage as Long? 
Public Property Mileage as Long? 
etc. 

さらに詳しい情報:私はNULL可能などのプロパティを定義しようとしたし、それが問題を解決しなかったhttps://msdn.microsoft.com/en-us/library/ms235245.aspx

+0

。私はもう一度それを試して、それが私がしたいように動作します。どういうわけか、私は最初に間違ったことをしたに違いない。 – SezMe

関連する問題