ListView не обновляется при изменении Bound ObservableCollection. Коллекция сделана из свойств, которые реализуют inotifC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ListView не обновляется при изменении Bound ObservableCollection. Коллекция сделана из свойств, которые реализуют inotif

Сообщение Anonymous »

У меня есть наблюдение под названием «машины». Он состоит из объектов с помощью машинной модели, и он связан с ListView. Свойства коллекции реализуют inotifycollectionChanged. Когда я обновляю коллекцию, ListView не обновляется, и я не смог определить, что я делаю не так. Я рассмотрел ответы, представленные здесь.















Add
Delete










Add
Delete











Add
Edit
Delete





< /code>
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>
Модель < /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));
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... lection-is
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ListView не обновляется при изменении Bound ObservableCollection
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • ListView не обновляется при изменении Bound ObservableCollection
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • ListView не обновляется при изменении Bound ObservableCollection
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • ObservableCollection внутри ObservableCollection, введите новый элемент в существующую ObservableCollection.
    Anonymous » » в форуме C#
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • ObservableCollection внутри ObservableCollection, введите новый элемент в существующую ObservableCollection.
    Anonymous » » в форуме C#
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»