Есть класс Product
public class Product
{
public string Title { get; set; }
public int Number { get; set; }
public int Price { get; set; }
public string Placement { get; set; }
public int NumPrice { get; set; }
}
Есть коллекция:
List<Product> products;
Так же добавление элемента в коллекцию:
products.Add(new Product { Title = "Adobe Photoshop", Number = 1, NumPrice = 10, Price = 20, Placement = "в наличии" });
LW.Items.Refresh();
Как изменить определенное значение. Допустим я хочу число Number заменить с единицы на 2, а также Adobe Photoshop заменить на Adobe Dreamviewer.
Ваша коллекция прикреплена к ListView через ItemsSource? Если да, то ваш класс Product должен имплементировать интерфейс INotifyPropertyChanged, и значение подхватится само.
При этом LW.Items.Refresh(); будет не нужно.
class Product : INotifyPropertyChanged
{
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
protected bool Set<T>(ref T field, T value,
[CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(field, value))
return false;
field = value;
RaisePropertyChanged(propertyName);
return true;
}
public event PropertyChangedEventHandler PropertyChanged;
string title;
public string Title
{
get { return title; }
set { Set(ref title, value); }
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// Находим нужный объект
var product = products.FirstOrDefault(p => p.Title == "Adobe Photoshop");
// Если что-то нашлось
if (product != null)
{
// Меняем свойства
product.Title = "Adobe Dreamviewer";
// И просим контрол обновить данные
LV.Items.Refresh();
}
}
Более правильный подход, который позволит вам проектировать бизнес-логику в отрыве от представления - реализовать интерфейс INotifyPropertyChanged в вашем классе Product:
public class Product : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string title;
public string Title
{
get
{
return title;
}
set
{
title = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Title)));
}
}
...
Контролы WPF поддерживают это и при получении события обновятся автоматически, без вызова Items.Refresh()
Обычно делают базовый класс и реализуют в нем INotifyPropertyChanged (примерно как в соседнем ответе). А все классы, которые будут выведены в GUI (VM-классы) наследуют от него, это позволяет повторно использовать код реализации INPC
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости