表单更新ListView中的一个元素

表单更新ListView中的一个元素,listview,mvvm,xamarin.forms,Listview,Mvvm,Xamarin.forms,我想在Xamarin.Forms中使用mvvm更新listview元素。我在网上学习了一些教程,现在我可以在我的listview中添加新项目和删除任何项目。 但是,我无法更新任何特定项目 这是我的ViewModel类: public class CarsViewModels : INotifyPropertyChanged { private ObservableCollection<Car> items; public ObservableCollection&l

我想在Xamarin.Forms中使用mvvm更新listview元素。我在网上学习了一些教程,现在我可以在我的listview中添加新项目和删除任何项目。 但是,我无法更新任何特定项目

这是我的ViewModel类:

public class CarsViewModels : INotifyPropertyChanged
{
    private ObservableCollection<Car> items;

    public ObservableCollection<Car> Items
    {
        get { return items; }

        set
        {
            items = value;
            OnPropertyChanged("Items");
        }
    }

    public CarsViewModels()
    {
        Items = new ObservableCollection<Car>() 
        {
            new Car()
            {
                CarID = 1,
                Make = "Tesla Model S"
            },
              new Car()
            {
                CarID = 2,
                Make = "Audi R8"
            },
        };
    }

    public event PropertyChangedEventHandler PropertyChanged;
    void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

添加和删除方法有效,但我无法更新汽车模型的make属性。有什么帮助吗?

您的汽车类实现了INotifyPropertyChanged吗?谢谢,Jason,您说得对。我已经实现了它并将这段代码添加到我的类中:公共字符串Make{get{return{u Make;}set{u Make=value;OnPropertyChanged(“Make”);}}公共事件PropertyChangedEventHandler PropertyChanged;void OnPropertyChanged([CallerMemberName]string propertyName=”“)=>PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
private void AddNewItemClicked(object sender, EventArgs e)
    {
        items.Add(new Car{CarID = 3, Make = "new car"});
    }

    private void RemoveItemClicked(object sender, EventArgs e)
    {
        Button clickedITem = (Button)sender;
        var clickedCar = (Car) clickedITem.BindingContext;

        items.Remove(clickedCar);
    }

    private void ChangeThisItemClicked(object sender, EventArgs e)
    {
        Button button = (Button)sender;
        var clickedCar = (Car)clickedITem.BindingContext;

        var changedItem = items.FirstOrDefault(x => x.CarID == clickedCar.CarID);

        if (changedItem != null)
        {
            changedItem.Make = "text has changed";
        }
    }