编辑列表中的行<Model>并刷新列表视图



我有一个模型如下:

public class Customers
{
public int CustomerId {get; set;}
public string CustomerName {get; set;}
public decimal Sales {get; set;}
}

在视图模型中,我有一个属性如下:

public List<Customers> CustomerList
{
get => _customerList;
set 
{
if (_customerList != value)
{
_customerList == value;
OnPropertyChanged;
} 
}
}

在 Customer.Xaml 中,我有一个包含网格的列表视图。此列表视图与上面提到的属性 CustomerList 绑定。

在这里,我有两个问题:

在同一个 Xaml 中,我有一个包含入口控件的弹出代码。当我单击"保存"按钮时,在ViewModel中触发了一个方法,该方法必须在客户模型中添加一个项目并刷新网格。

其次,如果列表中已存在特定的 CustomerId,我必须更新模型中的销售数字。

我尝试了视图模型保存方法,如下所示:

Customers customer = new Customers();
customer.Id = "499";
customer.Name = "Sample Customer";
customer.Sale = 2000;
List<Customers> list = new List<Customers>();
list.items.Add(customer);

尽管上述值应来自 Entry 控件,但我进行了硬编码以进行测试。

当我这样做时,该项目既不会添加到列表中,也不会刷新网格。可能是因为它是一个新实例。其次,如何编辑列表中的行。

ListView上使用ItemsSourceObservableCollection,不要创建一个新的,添加和删除条目只是为了保持绑定完整。喜欢这个:

public class YourViewModel
{
public ObservableCollection<Customer> CustomersList = new ObservableCollection<Customer> { get; set; }
public void UpdateCustomers(IEnumerable<Customers> newCustomers)
{
CustomersList.Clear();
foreach (var customer in newCustomers)
CustomersList.Add(customer);
}
}

ObservableCollection将替换您案例中的List。将其视为具有INotifyPropertyChanged变体实现的列表。每当在集合中添加或删除项时,UI 都会收到通知并相应地更新。

此外,在Customer对象上实现INotifyPropertyChanged以刷新该类型的值。我看到您已经在 ViewModel 上实现了INotifyPropertyChanged,所以我不会在这里详细介绍。

最新更新