使用 NavigationParameters 填充 ListView?
Populating ListView with NavigationParameters?
在我的 Xamarin Forms 应用程序中,我有一个包含不同单元格的 ListView,使用 DataTemplates 和 DataTemplateSelectors。对于一种类型的单元格,它上面有一个按钮,点击该按钮会导航到另一个页面,该页面仅包含一个仅由字符串组成的 ListView。
我的问题是在页面加载后调用了 OnNavigatedTo 方法,因此我传递给这个新 'ListView only' 页面的列表更新了我在 ListView 之后绑定 ListView 的值已创建并填充,但它没有填充任何内容,因为数据来自上一页,通过 OnNavigatedTo 方法。
public class ListPageViewModel : _ViewModelBase
{
private INavigationService _navigationService;
public ListPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
_strings = new List<string>()
{
"Jaguar", "Elephant", "Nemo", "Cat", "Dog", "Iguana", "Puma", "Crow", "Hawk", "Owl", "Badger", "Meerket",
"Shark", "Whale", "Monkey", "Snake", "Lion", "Zebra", "Hippo", "Squirrel", "Rhino", "Bear", "Moose",
"Camel", "Chicken", "Cow", "Sheep", "Turkey", "Jellyfish", "Salmon", "Parrot", "Wolf", "Gecko"
// Placeholder before we have lists of customers
};
}
private IEnumerable<string> _strings;
public IEnumerable<string> Strings { get { return _strings; } set { SetProperty(ref _strings, value); } }
public override void OnNavigatedTo(NavigationParameters parameters)
{
base.OnNavigatedTo(parameters);
if (parameters.ContainsKey("dataList"))
{
_strings = (List<string>)parameters["dataList"];
}
}
}
所以当我导航到这个页面时,_strings
列表首先填充动物列表,然后页面加载显示 ListView 中的所有动物,然后在 ListView 加载它之后将 _strings
列表的值更改为与随 NavigationParameters 一起传递的列表相同。那么如何在每次 _strings
列表更改或更新时更新 ListView?
两者都
Strings = (List<string>)parameters["dataList"];
或使用 ObservableCollection
在我的 Xamarin Forms 应用程序中,我有一个包含不同单元格的 ListView,使用 DataTemplates 和 DataTemplateSelectors。对于一种类型的单元格,它上面有一个按钮,点击该按钮会导航到另一个页面,该页面仅包含一个仅由字符串组成的 ListView。
我的问题是在页面加载后调用了 OnNavigatedTo 方法,因此我传递给这个新 'ListView only' 页面的列表更新了我在 ListView 之后绑定 ListView 的值已创建并填充,但它没有填充任何内容,因为数据来自上一页,通过 OnNavigatedTo 方法。
public class ListPageViewModel : _ViewModelBase
{
private INavigationService _navigationService;
public ListPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
_strings = new List<string>()
{
"Jaguar", "Elephant", "Nemo", "Cat", "Dog", "Iguana", "Puma", "Crow", "Hawk", "Owl", "Badger", "Meerket",
"Shark", "Whale", "Monkey", "Snake", "Lion", "Zebra", "Hippo", "Squirrel", "Rhino", "Bear", "Moose",
"Camel", "Chicken", "Cow", "Sheep", "Turkey", "Jellyfish", "Salmon", "Parrot", "Wolf", "Gecko"
// Placeholder before we have lists of customers
};
}
private IEnumerable<string> _strings;
public IEnumerable<string> Strings { get { return _strings; } set { SetProperty(ref _strings, value); } }
public override void OnNavigatedTo(NavigationParameters parameters)
{
base.OnNavigatedTo(parameters);
if (parameters.ContainsKey("dataList"))
{
_strings = (List<string>)parameters["dataList"];
}
}
}
所以当我导航到这个页面时,_strings
列表首先填充动物列表,然后页面加载显示 ListView 中的所有动物,然后在 ListView 加载它之后将 _strings
列表的值更改为与随 NavigationParameters 一起传递的列表相同。那么如何在每次 _strings
列表更改或更新时更新 ListView?
两者都
Strings = (List<string>)parameters["dataList"];
或使用 ObservableCollection