如何使用条目和按钮向observablecollection添加第二个项目而不覆盖第一个项目?

时间:2017-05-29 14:51:27

标签: c# listview xamarin.forms observablecollection

我希望用户通过我的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对象。所以我的列表视图中显示了一个项目,如果我尝试添加另一个项目,它将覆盖第一个项目。

任何人都可以帮助我吗?

编辑:添加了用于列表视图的所有代码

1 个答案:

答案 0 :(得分:1)

好的,所以我已经明白了。我做错了什么:每次在将项添加到我的列表之前创建一个observablecollection的新实例。所以每当调用PopulateListview()时,它都会覆盖observablecollection的当前实例。

我为了解决这个问题而改变了,是我在同一行上立即创建了一个observablecollection的实例。

private static ObservableCollection<ViewModels.ZoneViewModel> Zones = new ObservableCollection<ViewModels.ZoneViewModel>();

而不是执行以下操作,稍后再创建实例。

private ObservableCollection<ViewModels.ZoneViewModel> Zones { get; set; }

因此;回答我的问题:我没有覆盖第一个项目,而是整个列表。如何解决这个问题就在上面。