如何解决如何从 api 响应 Xamarin Forms 多次修改 ObservableCollection 中的数据
我正在用响应和报告 api 填充 ObservableCollection
,其中包含来自 Json 格式数组的以下数据:
[
{
"date": "2021-06-08 11:46:55","product": "EXCHANGE","amount": 1,"total": "90","points": "90","id": "5581"
},{
"date": "2021-06-03 17:33:00","product": "GNV","amount": "80","total": "270","points": "27","id": 102959
},]
“还有更多类似的数据,但我将这两个示例放在一起,因为我以这种格式接收它们”
所以我将数据添加到 ObservableCollection
public class WebApiClientService
{
private HttpClient _client;
public WebApiClientService()
{
_client = new HttpClient();
}
public async Task<T> CallPostTransactionsTask<T>(object objectParams)
{
Uri uri = new Uri(string.Format(Constants.urlTransactions));
try
{
var jsonData = JsonConvert.SerializeObject(objectParams);
var contentJson = new StringContent(jsonData,Encoding.UTF8,"application/json");
HttpResponseMessage response = await _client.PostAsync(uri,contentJson);
if (response.IsSuccessStatusCode)
{
var jsonResult = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(jsonResult);
}
else
{
return default(T);
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
}
public class TransaccionesResponseModel
{
public DateTime date{ get; set; }
public string product{ get; set; }
public double amount{ get; set; }
public int total { get; set; }
public double points{ get; set; }
public int id { get; set; }
}
public class TransactionsPageViewModel : BaseViewModel
{
private WebApiClientService webApi = new WebApiClientService();
private ObservableCollection<TransaccionesResponseModel> listTransactions;
public ObservableCollection<TransaccionesResponseModel> ListTransactions
{
get
{
return this.listTransactions;
}
set
{
if (this.listTransactions == value)
{
return;
}
this.SetProperty(ref this.listTransactions,value);
}
}
public TransactionsPageViewModel()
{
CheckTransactions();
}
public async void CheckTransactions()
{
var transactionConsult = new
{
codeClient = "909090",dateStart= "2021-02-01 00:00:00",dateEnd= "2021-06-10 23:59:59"
};
ListTransactions= await webApi.CallPostTransactionsTask<ObservableCollection<TransaccionesResponseModel>>(transactionConsult);
}
}
在 XAML 中
<ContentPage.Content>
<StackLayout Padding="5">
<CollectionView ItemsSource="{Binding ListTransactions}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="10,0" RowDefinitions="Auto,Auto">
<Frame
Padding="5"
BackgroundColor="White"
BorderColor="#C5740C"
CornerRadius="5"
IsClippedToBounds="False">
<Grid ColumnDefinitions="*,*">
<StackLayout Grid.Column="0">
<Label Text="Date:" />
<Label Text="Product:"/>
<Label Text="Amount:"/>
<Label Text="Points:" />
<Label Text="Id:" />
</StackLayout>
<StackLayout Grid.Column="1">
<Label
BackgroundColor="Transparent"
HorizontalTextAlignment="End"
Text="{Binding date,StringFormat='{0:dd/MM/yyyy HH:mm}'}" />
<Label
BackgroundColor="Transparent"
HorizontalTextAlignment="End"
Text="{Binding product}" />
<Label
BackgroundColor="Transparent"
HorizontalTextAlignment="End"
Text="{Binding amount,StringFormat='{0:#,0.#0}'}" />
<Label
BackgroundColor="Transparent"
HorizontalTextAlignment="End"
Text="{Binding total,StringFormat='{0:#.00}'}" />
<Label
BackgroundColor="Transparent"
HorizontalTextAlignment="End"
Text="{Binding points,0.#0}'}" />
<Label
BackgroundColor="Transparent"
HorizontalTextAlignment="End"
Text="{Binding id}" />
</StackLayout>
</Grid>
</Frame>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ContentPage.Content>
它把我画成这样:
date: 2021-06-08 11:46
product: EXCHANGE
amount: 1
total: 90
points: 90
id: 5581
date: 2021-06-03 17:33
product: GNV
amount: 80
total: 270
points: 27
id: 102959
现在我想增加 -
的符号
到 points: 90
时:product: EXCHANGE
当每个 product
等于 EXCHANGE
时,我想以这种方式得到结果:
date: 2021-06-08 11:46
product: EXCHANGE
amount: 1
total: 90
points: -90
id: 5581
解决方法
使用 LINQ 获取匹配的交易
var match = myCollection.Where(x => x.product == "EXCHANGE").ToList();
然后更新匹配的项目
foreach (var m in match)
{
m.points = -90;
// modify any other properties here
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。