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.
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]
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(); } }
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(); } } } [/code]
Konzept Ich versuche zu erstellen, ist zwei Scrollviews, die miteinander synchronisieren. Wenn sich die Position in einem Scrollview ändert (über das Scrolling), wird die Position in Second...
Ich habe eine CollectionViewSource mit Filterung angewendet. Ich möchte, dass der Filter jedes Mal angewendet wird, wenn die Eigenschaft bei Änderungen gefiltert wird. Ich glaube, dass ich...
Ich arbeite an einer asynchronen Python-Anwendung (unter Verwendung von Fastapi/Starlette/Asyncio), das synchrone CPU-gebundene Aufgaben zu einem Thread-Pool (synchrones CPU-gebundene Aufgaben) (...
Ich arbeite an einer asynchronen Python-Anwendung (unter Verwendung von Fastapi/Starlette/Asyncio), das synchrone CPU-gebundene Aufgaben zu einem Thread-Pool (synchrones CPU-gebundene Aufgaben) (...