Есть класс 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не выводит две последние колодки, выводит только название и лого, а часы не выводит
У меня есть 5 блоков с ссылкамиПри нажатии на ссылку, должна появляться менюха в модальном окне
Доброго времени сутокКак можно выбрать соответствующую опцию в select при клике на одну из строк таблицы ? т