Xamarin MVVM当ObservableCollection中的一个项目的属性改变时,如何调用一个方法?

o2rvlv0m  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(119)

我有一个实现PropertyChanged的模型,在我的ViewModel中有一个这个模型的ObservableCollection,我想知道当ObservableCollection中的一个对象的属性改变时,我如何调用这个方法。
在这个示例代码中,我希望在更改PersonList中某个项的age属性(或任何属性)时调用OrderList方法。

型号

public class Person: NotifyBase
{
    public string Name
    {
        get { return name; }
        set { name = value; Notify(); }
    }
    
    public int Age
    {
        get { return age; }
        set { age = value; Notify(); }
    }

通知库

public class NotifyBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void Notificar([CallerMemberName] string prop = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
    }
}

视图模型

public class PeopleViewModel : BaseViewModel
{
    public ObservableCollection<Person> PersonList { get; set; } = new ObservableCollection<Person> { 
        new Person{ Name = "John", Age = 21},
        new Person{ Name = "Mary", Age = 15},
        new Person{ Name = "Steve", Age = 42},
        new Person{ Name = "Marik", Age = 23},
    };
}

void OrderList(){
    List<Person> list = PersonList.OrderBy(x => x.Age).ToList();

    PersonList.Clear();

    foreach (var item in list )
        PersonList.Add(item);
}
nnvyjq4y

nnvyjq4y1#

你可以这样做

foreach(var person in PersonList)
{
    person.PropertyChanged += yourPropertyChangedMethod;
}

这样,您就可以订阅列表中对象的每个属性更改事件。

相关问题