【发布时间】:2019-07-09 18:38:40
【问题描述】:
我有一个列表视图并将其源分配为
lvItemSigns.ItemsSource = viewmodel.ItemSignsList;
在 listview 数据单元中我正在添加按钮,当它被点击时它应该删除项目并且列表应该自动更新。
在页面中:
protected override void OnAppearing()
{
base.OnAppearing();
InitializeComponent();
VM = new ItemSignsTabViewModel(this);
this.BindingContext = VM;
lvItemSigns.IsGroupingEnabled = true;
lvItemSigns.HasUnevenRows = true;
lvItemSigns.ItemsSource = VM.ItemSignsGroupedList;
}
class DataCell : ViewCell
{
public DataCell()
{
var DeleteDuplicateItem = new Button();
DeleteDuplicateItem.Clicked += Remove_Clicked;
}
}
private void Remove_Clicked(object sender, EventArgs e)
{
var button = sender as Button;
var ticketItem = button.BindingContext as TicketItem;
var vm = BindingContext as ItemSignsTabViewModel;
// here vm is always getting null so I had to use an event
vm.RemoveItemCommand.Execute(ticketItem);
}
在上面的代码中,vm总是为null,如果我使用新的实例,我的列表不会更新。
在视图模型中:
public Command<TicketItem> RemoveItemCommand
{
get
{
return new Command<TicketItem>((TicketItem) =>
{
ItemSignsList.Remove(ItemSignsList.Where(i => i.MobileID == TicketItem.MobileID).Single());
});
}
}
那么如何让视图模型的实例在点击按钮时更新我的列表?
【问题讨论】:
-
这应该可行,尽管这样做很笨拙。您在哪里分配页面的 BindingContext?为什么不直接创建一个类级别的 ViewModel 引用而不是强制转换 BindingContext?
-
为什么不直接绑定ItemSignsTabViewModel的命令呢?你也可以显示视图吗?
-
我创建了一个类级别的视图模型,但无法在数据单元格中访问它。为了解决这个问题,我在单击按钮后实现了一个事件,并在 viewmodel 中注册了该事件。
-
没有。我无法使用数据单元中的项目访问视图模型,因此在单击按钮时使用了事件
-
你能展示你完整的 Page 代码吗?
lvItemSigns.ItemsSource = viewmodel.ItemSignsList;这里生成了viewmodel,无法访问?
标签: listview mvvm xamarin.forms