2017-01-18 6 views
-2

Ich erstelle ein UserControl, aber ich kann die Werte nicht aktualisieren.Ändern Sie den Wert WPF-Benutzersteuerelemente

Wenn ich die App mit einem Wert in der TextBox starte, wird es erfasst. aber wenn ich den Wert ändere und den Knopf berühre, notiere den neuen Wert.

Dies ist die Benutzerverwaltung XAML:

<TextBox x:Name="txtCedula" md:HintAssist.Hint="Cedula" Text="{Binding txtCedula1}" Style="{StaticResource MaterialDesignFloatingHintTextBox}" Height="40" Margin="113.496,81.01,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="243.5" /> 

Und das ist der Code VB:

Partial Public Class Conductor 
    Public Property txtCedula1 As String 
     Get 
      Return txtCedula.Text 
     End Get 
     Set(value As String) 
      txtCedula.Text = value 
     End Set 
    End Property 
End Class 

Hier bin ich versuchen, den Wert erfassen, dass ich

Private Sub btnGuardar_Click(sender As Object, e As RoutedEventArgs) Handles btnGuardar.Click 
    validarCampos() 
End Sub 
Private Sub CaptureValue() 
      Dim conductor As New Conductor 

      If conductor.txtCedula1 = Nothing Then 
         MessageBox.Show("Ivalid", "SmartTruck", MessageBoxButton.OK, MessageBoxImage.Information) 

      End If 
    End Sub 
eingeben

Ich bekomme immer die ungültige Nachricht, auch wenn ich die Werte eingeben

+0

Sie haben nicht gezeigt Klicken Sie auf den Button click event code. Wenn es CaptureValue aufruft, tut dies nichts, wenn es Text in der Box – peterG

+0

gibt. Bereit. Die Nachricht sollte nicht herauskommen. Da ich Einkommen –

Antwort

0

Sie müssen nur implementieren INotifyPropertyChanged und schmücken Sie Eigenschaften damit. Else, wenn Sie sind verbindlich XAML:

<Textbox Text = "{Binding Test}"' /> 

Es weiß, kann sie einmal festgelegt werden, aber nicht auf alle Updates:

So etwas sollte funktionieren, wenn Sie MVVM tun. Sie müssen auch sicherstellen, dass Ihr ViewModel oder eine andere Klasse an den Datenkontext gebunden ist, der so klingt, als würden Sie sagen, dass es sich beim ersten Mal zeigt.

So etwas wie dies für das Ansichtsmodell:

Public Class TextViewModel 
    Implements INotifyPropertyChanged 

Private _test As String 

Public Property Test As String 
    Get 
     Return _test 
    End Get 
    Set(ByVal value As String) 
     _test = value 
     ' Call OnPropertyChanged whenever the property is updated 
     OnPropertyChanged("Test") 
    End Set 
End Property 

' Declare the event 
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 

' Create the OnPropertyChanged method to raise the event 
Protected Sub OnPropertyChanged(ByVal name As String) 
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name)) 
End Sub 

End Class 
+0

erhalte, würde ich auch hinzufügen, dass Sie Befehle sowie Ansammlungen auch binden müssen, wenn Sie andere Sachen tun werden. Grundsätzlich muss der UI-Thread wissen, was der Code-Thread tut, und Sie implementieren in der Regel mehr Funktionalität durch Codierungshilfsmethoden in WPF. – djangojazz

1

Sie eine neue Instanz der Usercontrol zu schaffen:

Dim conductor As New Conductor 

Sie sollen die bestehende Instanz darauf zugreifen. Wenn Sie das Usercontrol-Element in der XAML-Markup des Fensters erklärt haben, sollten Sie es ein x geben: Name:

<local:Conductor x:Name="uc" /> 

Sie können es dann mit diesem Namen zugreifen:

Private Sub btnGuardar_Click(sender As Object, e As RoutedEventArgs) Handles btnGuardar.Click 
    validarCampos() 
End Sub 

Private Sub CaptureValue() 
    If uc.txtCedula1 = Nothing Then 
     MessageBox.Show("Ivalid", "SmartTruck", MessageBoxButton.OK, MessageBoxImage.Information) 
    End If 
End Sub 
+0

Vielen Dank für die Hilfe –

Verwandte Themen