首页 > 解决方案 > 如何更改 Observable Collection 元素中 Class 的属性?

问题描述

我有一个observable collection,装满了Class properties。我想在更改 a 时toggle button更改恰好 1 个元素中的属性之一。

这是集合的样子:

private ObservableCollection<Item> ceilingItems = new ObservableCollection<Item>();
ceilingItems.Add(new Item() { Category = language.GetString("top-mesh"), Name = "4. " + language.GetString("main-direction"), Value1 = list1, Unit1 = "mm", Value2 = list2, Unit2 = "cm", IsEditable = true });
ceilingItems.Add(new Item() { Category = "", Name = "3. " + language.GetString("side-direction"), Value1 = list1, Unit1 = "mm", Value2 = list2, Unit2 = "cm", IsEditable = false });
ceilingItems.Add(new Item() { Category = language.GetString("bottom-mesh"), Name = "2. " + language.GetString("side-direction"), Value1 = list1, Unit1="mm", Value2 = list2, Unit2 = "cm", IsEditable = false });
ceilingItems.Add(new Item() { Category = "", Name = "1. " + language.GetString("main-direction"), Value1 = list1, Unit1 = "mm", Value2 = list2, Unit2 = "cm", IsEditable = true });
ceilingItems.Add(new Item() { Category = language.GetString("lace"), Name = "", Value1 = list1, Unit1 = "mm", Value2 = list2, Unit2 = "cm", IsEditable = true });
ceilingItems.Add(new Item() { Category = language.GetString("spacer-iron"), Name = "", Value1 = list1, Unit1="mm", Value2 = list3, Unit2 = language.GetString("piece") + " / m2", IsEditable = true });

Item班级:

public class Item
{
    public string Category { get; set; }
    public string Name { get; set; }
    public List<int> Value1 { get; set; }
    public string Unit1 { get; set; }
    public List<double> Value2 { get; set; }
    public string Unit2 { get; set; }
    public bool IsEditable { get; set; }
}

我有一个函数,我想以某种方式(单击按钮后)定义,IsEditable应该2. element of the collection更改为true. 我不知道怎么做。

这是按钮的功能:

private void ToggleButton1_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
            
}

标签: c#wpf

解决方案


访问该项目并设置其属性:

private void ToggleButton1_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    int index = 1; //second element
    ceilingItems[index].IsEditable = true;          
}

如果IsEditable是数据绑定,则应INotifyPropertyChanged在类中实现接口Item以通知 UI 更改:

public class Item : INotifyPropertyChanged
{
    public string Category { get; set; }
    public string Name { get; set; }
    public List<int> Value1 { get; set; }
    public string Unit1 { get; set; }
    public List<double> Value2 { get; set; }
    public string Unit2 { get; set; }

    private bool _isEditable;
    public bool IsEditable
    {
        get { return _isEditable; }
        set { _isEditable = value; NotifyPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

推荐阅读