Listview 如何刷新列表视图项

Listview 如何刷新列表视图项,listview,xamarin.forms,Listview,Xamarin.forms,我正在研究xamarin.forms列表视图。这里我在view1中有一个ListView。Listview的项目将从View2中提供 我有一个View1和View2的ViewModel。添加项目详细信息后,我尝试在从view2转到View1之前加载listView项目 功能上一切正常,但View1没有从view2更新 到目前为止我所做的: -对列表视图使用ObservableCollection -从View2更新: // Calling this from View2 Device.Begin

我正在研究xamarin.forms列表视图。这里我在view1中有一个ListView。Listview的项目将从View2中提供

我有一个View1和View2的ViewModel。添加项目详细信息后,我尝试在从view2转到View1之前加载listView项目

功能上一切正常,但View1没有从view2更新

到目前为止我所做的:

-对
列表视图使用ObservableCollection

-从View2更新:

// Calling this from View2
Device.BeginInvokeOnMainThread(async () =>
{
    await LoadListViewDetails();
});

有什么我遗漏的吗?

我遇到过这样的情况,在这种情况下,为
ObservableCollection
属性设置新值不会更新
列表视图。仅当您创建新的
observateCollection
时,它才会更新UI

试试这个:

var listFromServer = SomeService.Instance.DetailsFromServer();
if (listFromServer?.Count > 0)
{
    ListViewItemSource = new ObservableCollection<MyModel>(listFromServer);
}
else
{
    ListViewItemSource = new ObservableCollection<MyModel>();
}
var listFromServer=SomeService.Instance.DetailsFromServer();
如果(listFromServer?.Count>0)
{
ListViewItemSource=新的ObservableCollection(listFromServer);
}
其他的
{
ListViewItemSource=新的ObservableCollection();
}

如果没有帮助,请尝试在View1出现时调用此代码。

我遇到过这样的情况,在这种情况下,为
ObservableCollection
属性设置新值不会更新
ListView
。仅当您创建新的
observateCollection
时,它才会更新UI

试试这个:

var listFromServer = SomeService.Instance.DetailsFromServer();
if (listFromServer?.Count > 0)
{
    ListViewItemSource = new ObservableCollection<MyModel>(listFromServer);
}
else
{
    ListViewItemSource = new ObservableCollection<MyModel>();
}
var listFromServer=SomeService.Instance.DetailsFromServer();
如果(listFromServer?.Count>0)
{
ListViewItemSource=新的ObservableCollection(listFromServer);
}
其他的
{
ListViewItemSource=新的ObservableCollection();
}

如果没有帮助,请在显示View1时尝试调用此代码。

好的,下面是一个简单的示例:

在View1中,在View1.xaml.cs中有一个名为ListView的ListView:

public partial class View1: ContentPage
{
    public static ObservableCollection<ViewModel> list;

    public View1()
    {
        InitializeComponent();
        list = new ObservableCollection<ViewModel>();
        list.Add(...);
        list.Add(...);
        list.Add(...);
        list.Add(...);
        list.Add(...);
        listview.ItemsSource = list;
    }
}

然后,当您返回到View1时,listview将更新,这里是通过定义静态全局使用它,您还可以使用将数据从View2传递到View1,然后接收和更新数据并更新listview。好的,下面是一个简单的示例:

在View1中,在View1.xaml.cs中有一个名为ListView的ListView:

public partial class View1: ContentPage
{
    public static ObservableCollection<ViewModel> list;

    public View1()
    {
        InitializeComponent();
        list = new ObservableCollection<ViewModel>();
        list.Add(...);
        list.Add(...);
        list.Add(...);
        list.Add(...);
        list.Add(...);
        listview.ItemsSource = list;
    }
}

然后,当您返回到View1时,listview将更新,这里是通过定义静态全局使用它,您还可以使用将数据从View2传递到View1,然后接收和更新数据并更新listview

您可以发布
LoadListViewDetails()
ListViewItemSource=new ObservableCollection()的代码吗;var listFromServer=SomeService.Instance.DetailsFromServer();如果(listFromServer?.Count>0){ListViewItemSource=listFromServer;}
这就是像@DennisSchröerHow这样的
LoadListViewDetails()
实现如何显示
View1
View2
?这是母版/详细页还是从
View2
导航回
View1
?这些只是内容页。我正在使用
wait Application.Current.MainPage.Navigation.PopAsync()
View2
导航到
View1
如何设置两个视图的
BindingContext
?我只想确保两个视图使用的是同一个
ViewModel
实例,您可以发布
LoadListViewDetails()
ListViewItemSource=new ObservableCollection()的代码吗;var listFromServer=SomeService.Instance.DetailsFromServer();如果(listFromServer?.Count>0){ListViewItemSource=listFromServer;}
这就是像@DennisSchröerHow这样的
LoadListViewDetails()
实现如何显示
View1
View2
?这是母版/详细页还是从
View2
导航回
View1
?这些只是内容页。我正在使用
wait Application.Current.MainPage.Navigation.PopAsync()
View2
导航到
View1
如何设置两个视图的
BindingContext
?我只想确保两个视图使用的是
ViewModel
Thank you@Dennis Schröer的同一个实例,但这对我没有帮助。我可以从视图1中调用它,但根据我的要求,不允许从外观调用。谢谢@Dennis Schröer,但这对我没有帮助。我可以从视图1中调用它,但根据我的要求,不允许从外观中调用。谢谢您的帮助,我可以通过MessagingCenter使其正常工作。由于某些原因,我无法初始化ViewModel,因此无法使用第一个解决方案,因此通过消息中心,我可以找到答案。感谢您的帮助,我可以通过消息中心使其正常工作。由于某些原因,我无法初始化ViewModel,因此无法使用第一个解决方案,因此通过消息中心,我可以找到答案。