none
Textfeld wird nicht geupdated bei ViewModel Datanbindung RRS feed

  • Frage

  • Hallo mal wieder,

     

    ich experimentiere noch mit dem ViewModel. Die Einbindung funzt wunderbar. Allerdings habe ich das Problem, wenn in einem anderen Fenster das Property geupdatet wird, aktualisiert sich nicht die Anzeige (Daten stehen aber korrekt drin)

    Hier der Code:

     

    Einbindung DataContainer ViewModel
    
    <Application x:Class="Application"
        xmlns:local="clr-namespace:SCBIZ.wawi2rewe.License.DataContainer">
      
      <Application.Resources>
        <local:ViewModel x:Key="data" />
      </Application.Resources>
    
    Die Bindung der Textbox:
    
    <DockPanel DataContext="{Binding Source={StaticResource data}}">
            <TextBox Name="TextBox7" IsReadOnly="True" Text="{Binding Path=KtoNummer}" />
    
    ....
    
    Das ViewModel:
    
    Imports System.ComponentModel
    Imports System.Data
    
    Namespace DataContainer
    
      Public Class ViewModel
        Implements INotifyPropertyChanged
    
        Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    
    
        Private Shared _KtoNummer As String = "KNummer"
        Public Property KtoNummer() As String
          Get
            Return _KtoNummer
          End Get
          Set(ByVal value As String)
            _KtoNummer = value
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("KtoNummer"))
          End Set
        End Property
    
      End Class
    
    End Namespace
    
    
    

     

    Das Property wird nun in einem anderen Fenster und Code neu gesetzt...

    Beispiel:

    ViewModel.KtoNummer = "12344"

    Wenn ich die Variablen prüfe, ist auch dieser Wert gesetzt aber das Textfeld zeigt noch den alten Wert an....

     

    Danke für Hilfe

    Gruss

    Torsten

    Samstag, 23. Oktober 2010 17:47

Antworten

  • Hallo Torsten,

    hab's nicht gleich gecheckt, aber so kannst du es nicht machen.

    Dim ttt as new DataContainer.ViewModel

    ttt.KtoNummer="1234"

    Dieser Code setzt zwar deine statische Variable _KtoNummer auf "1234" aber der PropertyChanged Event wird vom Objekt ttt gefeuert auf das sich die Oberfläche nicht registriert hat. Du musst dir das Property auf dem Objekt setzen auf das sich das Control gebunden hat, oder du machst das Property selbst Shared.

    Du könntest auch versuchen das "globale" ViewModel aus den Resourcen zu laden.

    Dim a As ViewModel = Application.Current.Resources("data")

    a.KtoNummer = "22222"

    Das würde den Event am richtigen Objekt auslösen.

    Günter

     

    • Als Antwort markiert Pattasatto Dienstag, 2. November 2010 13:53
    Montag, 1. November 2010 21:15

Alle Antworten

  • Hallo Torsten,

    Ich sehe keinen Grund warum es nicht funktionieren sollte. Ist das der original Code aus deiner Anwendung, oder hast du nur für die Frage etwas zusammengestellt?

    Wie kommst du zum Objekt ViewModel damit du ViewModel.KtoNummer auf "1234" setzen kannst?

     

    Sonntag, 24. Oktober 2010 19:37
  • Hallo Günter,

     

    der Code ist direkt aus dem Programm.... Zum setzen mache ich:

    Dim ttt as new DataContainer.ViewModel

    ttt.KtoNummer="1234"

    oben das war exemplarisch. Das Property ist ein Shared... daher kann ich es ohne Probleme instanziieren.

     

    Gruss

    Torsten

    Montag, 25. Oktober 2010 05:42
  • Hallo,

    dieser Thread steht nun schon ne weile, wie mein anderer mit nem ähnlichen Problem. Dann stelle ich mal die Frage anders... Hat auch schon jemand malähnliche Erfahrung gemacht, dass in der Programmierung etwas nicht funzt, was eigentlich definitiv funzen sollte???? Eventuell ist es ja ein Bug in Visual Studio 2010???

    Eventuell kann sich auch mal jemand von Microsoft um diesen Thread kümmern.....

     

    Als Background Info:

    Basissystem ist Windows 7 Ultimate, SQL 2008 R2, Visual Studio 2010 - DEV Version

    Ansonsten ist immer alles Uo to Date vom Software Stand

    Sonntag, 31. Oktober 2010 08:04
  • Hallo,

    wenn du willst kannst du mir ein lauffähiges Projekt deines Problems senden (am besten nur den Teil der nicht funktionert, ich will nichts installieren müssen). Vielleicht finden ich ja etwas.

    Günter

    office (at) schwaiger.at

     

    Sonntag, 31. Oktober 2010 17:02
  • Hallo Torsten,

    hab's nicht gleich gecheckt, aber so kannst du es nicht machen.

    Dim ttt as new DataContainer.ViewModel

    ttt.KtoNummer="1234"

    Dieser Code setzt zwar deine statische Variable _KtoNummer auf "1234" aber der PropertyChanged Event wird vom Objekt ttt gefeuert auf das sich die Oberfläche nicht registriert hat. Du musst dir das Property auf dem Objekt setzen auf das sich das Control gebunden hat, oder du machst das Property selbst Shared.

    Du könntest auch versuchen das "globale" ViewModel aus den Resourcen zu laden.

    Dim a As ViewModel = Application.Current.Resources("data")

    a.KtoNummer = "22222"

    Das würde den Event am richtigen Objekt auslösen.

    Günter

     

    • Als Antwort markiert Pattasatto Dienstag, 2. November 2010 13:53
    Montag, 1. November 2010 21:15