ListView nicht aktualisiert, wenn sich gebundene Beobachtungsvorschriften ändertC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 ListView nicht aktualisiert, wenn sich gebundene Beobachtungsvorschriften ändert

Post by Anonymous »

Ich habe eine Beobachtung mit dem Namen "MachineFamilies". Es besteht aus Maschinenfamilienmodel -Objekten und ist an eine ListView gebunden. Die Eigenschaften der Sammlung implementieren InotifyCollectionChanged. Wenn ich die Sammlung aktualisiere, aktualisiert die ListView nicht und ich konnte nicht feststellen, was ich falsch mache. Ich habe die hier bereitgestellten Antworten überprüft.

Code: Select all
















Add
Delete










Add
Delete











Add
Edit
Delete





< /code>
Das ViewModel < /p>
using GPI_EE_TOOLS_V3.Models;
using GPI_EE_TOOLS_V3.ViewModels.Helpers;
using Microsoft.Data.Sqlite;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GPI_EE_TOOLS_V3.ViewModels.Commands.PackageEditor;
using System.Transactions;
using System.ComponentModel;

namespace GPI_EE_TOOLS_V3.ViewModels
{
public class PackageEditorVM : INotifyPropertyChanged
{
private ObservableCollection  machineFamilies;
private MachineFamilyModel selectedMachineFamily;

public PackageEditorVM()

{
packageFamilyAddCommand = new PackageFamilyAddCommand(this);
machineFamilyOKCommand = new MachineFamilyOKCommand(this);
machineFamilies = new ObservableCollection();
FetchData();
}

public event PropertyChangedEventHandler? PropertyChanged;

public ObservableCollection MachineFamilies
{
get => machineFamilies;
set
{
machineFamilies = value;
OnPropertyChanged(nameof(machineFamilies));
}
}

public MachineFamilyOKCommand machineFamilyOKCommand { get; set; }
public ObservableCollection MachinePackages { get; set; } = new ObservableCollection { };
public string NewFamilyName { get; set; }

public PackageFamilyAddCommand packageFamilyAddCommand { get; set; }

public MachineFamilyModel SelectedMachineFamily
{
get
{
return selectedMachineFamily;
}

set
{
selectedMachineFamily = value;
//Update the packages shown when the selected machine family changes
FetchPackages();
}
}

public void AddFamily()
{
Guid guid = Guid.NewGuid();
SqliteConnection connection = new SqliteConnection("DataSource=" + AppDataHelper.AppDataFolder + @"\gpieedb.db");
connection.Open();
SqliteCommand commandlocal = connection.CreateCommand();
using (var transaction = connection.BeginTransaction())
{
commandlocal.Transaction = transaction;

commandlocal.CommandText = @"INSERT into machinefamilies (familyname, familyguid) values ($familyname, $familyguid)";

var parameter_familyname = commandlocal.CreateParameter();
parameter_familyname.ParameterName = "$familyname";
commandlocal.Parameters.Add(parameter_familyname);

var parameter_familyguid = commandlocal.CreateParameter();
parameter_familyguid.ParameterName = "$familyguid";
commandlocal.Parameters.Add(parameter_familyguid);

parameter_familyguid.Value = guid;
parameter_familyname.Value = NewFamilyName;

commandlocal.ExecuteNonQuery();
transaction.Commit();
}
connection.Close();
FetchData();
}

private void FetchData()
{
MachineFamilies.Clear();
SqliteConnection connection = new SqliteConnection("DataSource=" + AppDataHelper.AppDataFolder + @"\gpieedb.db");
connection.Open();
SqliteCommand command = connection.CreateCommand();
command.CommandText = $"SELECT * FROM machinefamilies";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
MachineFamilyModel machineFamilyModel = new MachineFamilyModel(
(string)reader["familyname"],
Guid.Parse((string)reader["familyguid"])
);
MachineFamilies.Add(machineFamilyModel);
}
}
connection.Close();
}

private void FetchPackages()
{
MachinePackages.Clear();
SqliteConnection connection = new SqliteConnection("DataSource="  + AppDataHelper.AppDataFolder + @"\gpieedb.db");
connection.Open();
SqliteCommand command = connection.CreateCommand();
command.CommandText = $"SELECT * FROM machinepackages";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
MachinePackageModel machinePackage = new MachinePackageModel(
(string)reader["name"],
Guid.Parse((string)reader["familyguid"]),
Guid.Parse((string)reader["packageguid"])
);
MachinePackages.Add(machinePackage);
}
}
connection.Close();
}

private void OnPropertyChanged(string propertyname)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
}
}
}
< /code>
Das Modell < /p>
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GPI_EE_TOOLS_V3.Models
{
public class MachineFamilyModel : INotifyPropertyChanged
{
private string name;
private Guid guid;

public MachineFamilyModel(string name, Guid guid)
{
Name = name;
Guid = guid;
}

public string Name
{
get => name;
set
{
name = value;
OnPropertyChanged(nameof(Name));
}
}

public Guid Guid
{
get => guid;
set
{
guid = value;
OnPropertyChanged(nameof(Guid));
}
}

public event PropertyChangedEventHandler? PropertyChanged;

private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
< /code>
Klicken auf die Schaltfläche Hinzufügen bringt ein neues Fenster auf, in dem der Benutzer aufgefordert wird, einen Familiennamen anzugeben.  < /p>















< /code>
Die Schaltfläche "OK" dieses Fensters ruft Maschinenfamilyokcommand < /p>
aufusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace GPI_EE_TOOLS_V3.ViewModels.Commands.PackageEditor
{
public class MachineFamilyOKCommand : ICommand
{
public PackageEditorVM VM { get; set; }

public MachineFamilyOKCommand(PackageEditorVM vM)
{
VM = vM;
}

public event EventHandler? CanExecuteChanged;

public bool CanExecute(object? parameter)
{
return true;
}

public void Execute(object? parameter)
{
VM.AddFamily();
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post