[英]Xamarin.Forms listview not updating in Android
在網上搜索每個論壇后,我決定發布我自己的問題:我的列表視圖數據在IOS中正確顯示,但在Android中沒有。 我綁定到我的視圖模型中的屬性,看起來正確,但我無法弄清楚我缺少的是什么(我正在嘗試獲取一個訂單列表來填充我的listview)。 任何幫助表示贊賞!
另外,我正在使用選項卡式頁面布局。 不確定這是否有所作為。
//View model
public ObservableCollection<GroupedOrderModel> ListOfOrdersGrouped
{
get { return listOfOrdersGrouped; }
set {
listOfOrdersGrouped = value;
NotifyPropertyChanged("listOfOrdersGrouped");
}
}
public class OrderList : List<OrderStatusInfo>
{
public string Heading { get; set; }
public List<OrderStatusInfo> Orders
{
get { return this; }
set { Orders = value; }
}
}
public async Task<bool> BuildListviewData()
{
await Task.Run(()=> {
ObservableCollection<GroupedOrderModel> orderList = new ObservableCollection<GroupedOrderModel>();
if (GlobalInfo.GlobalOrderList != null && GlobalInfo.GlobalOrderList.Count > 0)
{
List<string> Headers = GlobalInfo.GlobalOrderList.Select(x => x.Status).Distinct().OrderBy(x => x).ToList();
foreach (var item in Headers)
{
var oGroup = new GroupedOrderModel
{
Heading = item
};
var oList = GlobalInfo.GlobalOrderList.Where(x => x.Status == item).ToList();
foreach (var o in oList)
oGroup.Add(o);
orderList.Add(oGroup);
}
ListOfOrdersGrouped = orderList;
}
}
}
//Orders.cs page
protected async override void OnAppearing()
{
await ovm.BuildListviewData();
BindingContext = ovm;
base.OnAppearing();
}
//The XAML
<ListView x:Name="ListViewOrdersList" HasUnevenRows="True" ItemsSource="{Binding ListOfOrdersGrouped}" IsGroupingEnabled="True">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Heading}" Margin="10"/>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="10">
<Label Text="{Binding OrderNo}" FontSize="20" HorizontalOptions="Start"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
將ItemSource屬性更改為
private listOfOrdersGrouped;
public ObservableCollection ListOfOrdersGrouped
{
get { return listOfOrdersGrouped; }
set {
listOfOrdersGrouped = value;
NotifyPropertyChanged("ListOfOrdersGrouped");
}
}
NotifyPropertyChanged應該是:
NotifyPropertyChanged("ListOfOrdersGrouped");
這樣名稱就與您在XAML中綁定的屬性的名稱相匹配。
對於遇到同樣問題的人:
問題最終成為我的視圖模型特定於頁面的問題(例如Orders.xaml.cs頁面的OrdersViewModel.cs)。 在我為App.xaml.cs頁面創建了一個AppViewModel.cs並將一個名為OrdersViewModel的新類轉儲到其中的OrdersViewModel屬性之后,它在項目運行App.xaml和App.xaml.cs頁面之前就已經完成了。做其他事情。 這就是為什么綁定在IOS而不是Android中工作的原因。 Android在綁定完成實例化之前嘗試處理每個選項卡頁面的所有代碼(因此,沒有顯示數據!)。
但是,我確實稍微調整了我的代碼。 以下是更改:
namespace MyApp.ViewModels
{
public class AppViewModel
{
public OrdersViewModel Ovm { get; set; }
}
public class OrdersViewModel : INotifyPropertyChanged
{
public ObservableCollection<GroupedOrderModel> ListOfOrdersGrouped
{
get { return listOfOrdersGrouped; }
set
{
listOfOrdersGrouped = value;
NotifyPropertyChanged("ListOfOrdersGrouped");
}
}
public async Task<bool> BuildListviewData()
{
//Same code here as mentioned above
}
}
//Deleted OrderList class mentioned above
public class GroupedOrderModel : ObservableCollection<OrderStatusInfo>
{
public string Heading { get; set; }
}
}
//Xaml
<ListView x:Name="ListViewOrdersList" HasUnevenRows="True" ItemsSource="{Binding Ovm.ListOfOrdersGrouped}" IsGroupingEnabled="True">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Heading}" Margin="10"/>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="10">
<Label Text="{Binding OrderNo}" FontSize="20" HorizontalOptions="Start"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
快樂的編碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.