Laden...

Listview GUI aktualisiert sich nicht

Erstellt von Moritz83 vor 4 Jahren Letzter Beitrag vor 4 Jahren 774 Views
M
Moritz83 Themenstarter:in
50 Beiträge seit 2013
vor 4 Jahren
Listview GUI aktualisiert sich nicht

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 🤔

Listview:

        <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)

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

mein UpdateCommand

        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

        //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

1.040 Beiträge seit 2007
vor 4 Jahren

Wie sieht denn das EmployeeEntity aus?

M
Moritz83 Themenstarter:in
50 Beiträge seit 2013
vor 4 Jahren

… 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 👍