2015-11-05 2 views
0

У меня есть текс-бокс, привязанный к объекту.Включение и выключение кнопки

<TextBox Name="txtPrice" Grid.Row="0" Grid.Column="2" MaxLength="8" TabIndex="1" 
    Text="{Binding Price, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True, 
    StringFormat= '\{0:#,###.##\}', ConverterCulture=fr-FR}" TextWrapping="Wrap"/> 


     Private Property _Price As Double 
     Public Property Price As Double 
     Get 
      Return Price 
     End Get 
     Set(value As Double) 
      _Price = Double.Parse(value) 
      OnPropertyChanged("Price") 
     End Set 
    End Property 

Когда я набираю несколько символов или текстовое поле пусто, то кнопка Cmd_Insert не должен быть включен, но не работает. Почему? (См Функция CanCmd_Insert())

Public ReadOnly Property Cmd_Insert As ICommand 
    Get 
     If _Cm_Insert Is Nothing Then 
      _Cm_Insert = New RelayCommand(AddressOf Cmd_InsertExe, AddressOf CanCmd_Insert) 
     End If 
     Return _Cm_Insert 
    End Get 
End Property 
Private Sub Cmd_InsertExe() 
    UPDATE_Price() 
End Sub 
Private Function CanCmd_Insert() As Boolean 
    If IsNumeric(Price) = False Then 
     Return False 
    Else 
     Return True 
    End If 
End Function 
+0

http://stackoverflow.com/questions/19364364/mvvm-relaycommand-canexecute Его в C# – Eldho

+0

Нет, это Vb ...... – Alan392

+0

Попробуйте установить 'Mode = TwoWay' в вашем связывании – Tomtom

ответ

0

Я добавил TargetNullValue='' и изменил вашу собственность NULLABLE. См. Приведенный ниже код.

<StackPanel> 
      <TextBox Name="txtPrice" Grid.Row="0" Grid.Column="2" MaxLength="8" TabIndex="1" 
    Text="{Binding Price, UpdateSourceTrigger=PropertyChanged, TargetNullValue='', 
    StringFormat= '\{0:#,###.##\}'}" TextWrapping="Wrap" />    
      <Button Content="Update" Command="{Binding Cmd_Insert }"></Button> 
     </StackPanel> 

    Imports GalaSoft.MvvmLight.CommandWpf 
Imports System.ComponentModel 

Public Class ViewModel 
    Implements INotifyPropertyChanged 
    Private Property _Price As Double? 
    Public Property Price As Double? 
     Get 
      Return _Price 
     End Get 
     Set(value As Double?) 
      _Price = value 
      OnPropertyChanged("Price") 
     End Set 
    End Property 

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 

    Private Sub OnPropertyChanged(ByVal info As String) 
     RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info)) 
    End Sub 
    Private Property _Cm_Insert As ICommand 
    Public ReadOnly Property Cmd_Insert As ICommand 
     Get 
      If _Cm_Insert Is Nothing Then 
       _Cm_Insert = New RelayCommand(AddressOf Cmd_InsertExe, AddressOf CanCmd_Insert) 
      End If 
      Return _Cm_Insert 
     End Get 
    End Property 
    Private Sub Cmd_InsertExe() 

    End Sub 
    Private Function CanCmd_Insert() As Boolean 
     If IsNumeric(Price) = False Then 
      Return False 
     Else 
      Return True 
     End If 
    End Function 
End Class 
+0

Извините, но где TargetNullValue? Я не нашел – Alan392

+0

Отредактировал свой ответ. Его привязка. –

+0

Отлично !!! ;-) Спасибо вам за помощь !!!! – Alan392

Смежные вопросы