myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Listview GUI aktualisiert sich nicht
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Listview GUI aktualisiert sich nicht

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 50


Moritz83 ist offline

Listview GUI aktualisiert sich nicht

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin,

ich habe ein kleines Problem mit meiner GUI. Meine WPF Anwendung besteht aus einer Listview, 2 TextBoxen und einem Button. Die Idee ist folgende:

Ich klicke auf einen Eintrag in der Listview, die beiden TextBoxen kriegen die entsprechenden Werte, ich ändere einen oder beide Werte, klicke auf den Button, werfe die Änderungen in die Datenbank und falls das klappt will ich die GUI aktualisieren. Irgendwie klappt das aber nicht so ganz verwundert

Listview:

C#-Code:
        <ListView Name="Employees_Listview" ItemsSource="{Binding Employees, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding YourSelectedItem, Mode=TwoWay}" Height="86">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}"/>
                    <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}"/>
                </GridView>
            </ListView.View>
        </ListView>

beide TextBoxen (diese sind absichtlich nicht direkt an das SelectedItem "YourSelectedItem" gekoppelt da ich ansonsten im ViewModel den aktualisierten Text nicht auslesen konnte -- habs net hingekriegt)

C#-Code:
<TextBox Name="FirstNameTextBox" Width="136" Text="{Binding FirstName, Mode=TwoWay}" />
<TextBox Name="LastNameTextBox" Width="136" Text="{Binding LastName, Mode=TwoWay}" />

mein UpdateCommand

C#-Code:
        private void UpdateEmployee()
        {
            var container = ContainerConfig.Configure();
            using (var scope = container.BeginLifetimeScope())
            {
                var SelectedEmployee = scope.Resolve<IEmployeeRepository>();
                YourSelectedItem.FirstName = FirstName;
                YourSelectedItem.LastName = LastName;
                if (!SelectedEmployee.Update(YourSelectedItem))
                {
                    MessageBox.Show("Datensatz konnte nicht aktualisiert werden!" + "\n" + "Bitte den Administrator verständigen!");
                    return;
                };
            }
        }

und meine 3 Properties

C#-Code:
        //TEST
        private string lastname;
        public string LastName
        {
            get { return lastname; }
            set
            {
                lastname = value;
                NotifyPropertyChanged("LastName");
            }
        }
        private string firstname;
        public string FirstName
        {
            get { return firstname; }
            set
            {
                firstname = value;
                NotifyPropertyChanged("FirstName");
            }
        }
        //TEST
        public EmployeeEntity YourSelectedItem
        {
            get
            {
                return _yourSelectedItem;
            }
            set
            {
                if (value != null) {
                FirstName = value.FirstName;
                LastName = value.LastName;
                }
                _yourSelectedItem = value;
                NotifyPropertyChanged("YourSelectedItem");
            }
        }

Sodele, wenn ich nun einen Eintrag anklicke, ändern sich die TextBoxen, ich kann etwas verändern, den Button drücken und die SQLite Datei wird aktualisiert. Wenn ich dann in der ListView andere Einträge anklicke und wieder zu meinem ursprünglichen zurück komme sehe ich in der TextBox den aktualisierten Wert, aber die ListView ist noch unverändert.

Hab rausgefunden das meine ObservableCollection so nur auf "Add" oder "Remove" reagiert, nicht aber wenn ich die Properties eines Items ändere.

Was kann ich hier tun?


PS: Ich habe diesen Ansatz bewusst gewählt da ich ja bei verknüpften (zum ausgewählten Element)TextBoxen das Problem hätte bei einem Fail zur Datenbank, die "alten" Werte wieder holen zu müssen (und keine Datenbank = keine alten Werte). Muss natürlich es nicht zwingen diese Lösung sein, aber es war für mich die "sinnvollste" Variante
15.10.2019 09:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.024
Entwicklungsumgebung: Visual Studio (Community) 2017


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie sieht denn das EmployeeEntity aus?
15.10.2019 10:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 50

Themenstarter Thema begonnen von Moritz83

Moritz83 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

… habe vergessen der Klasse das "INotifyPropertyChanged" mitzugeben, aber das Event hatte ich bereits drin

Ist nicht mein Tag heute, danke dir für den Wink mit dem Zaunpfahl Daumen hoch
15.10.2019 10:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.01.2020 01:08