我希望用户通过我的Xamarin.forms应用程序中的条目将项添加到observablecollection。点击"添加"按钮我想添加一个项目,其中包含用户刚刚提交的信息。然后,它将显示在列表视图中。
public MainPage(string image = "@drawable/icon", string name = "", string address = "")
{
InitializeComponent();
BindingContext = this;
PopulateListView(image, name, address);
}
public void PopulateListView(string image, string name, string address)
{
Zones = new ObservableCollection<ViewModels.ZoneViewModel>();
Zones.Add(new ViewModels.ZoneViewModel { Image = image, Name = name, Address = address });
Application.Current.Properties["zoneslist"] = Zones;
DisplayAlert("t", "t", "OK");
}
protected override void OnAppearing()
{
if (Application.Current.Properties.ContainsKey("zoneslist"))
{
// Put the contents of the "zoneslist" key into a variable as a string.
var savedZones = Application.Current.Properties["zoneslist"] as ObservableCollection<ViewModels.ZoneViewModel>;
// Set the listviews' itemssource to the savedzones list.
zonesList.ItemsSource = savedZones;
}
}
我认为现在正在做的是覆盖ZoneViewModel对象。所以我的列表视图中显示了一个项目,如果我尝试添加另一个项目,它将覆盖第一个项目。
任何人都可以帮助我吗?
编辑:添加了用于列表视图的所有代码
答案 0 :(得分:1)
好的,所以我已经明白了。我做错了什么:每次在将项添加到我的列表之前创建一个observablecollection的新实例。所以每当调用PopulateListview()时,它都会覆盖observablecollection的当前实例。
我为了解决这个问题而改变了,是我在同一行上立即创建了一个observablecollection的实例。
private static ObservableCollection<ViewModels.ZoneViewModel> Zones = new ObservableCollection<ViewModels.ZoneViewModel>();
而不是执行以下操作,稍后再创建实例。
private ObservableCollection<ViewModels.ZoneViewModel> Zones { get; set; }
因此;回答我的问题:我没有覆盖第一个项目,而是整个列表。如何解决这个问题就在上面。