- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一处房产 [ 总行程] 我在 Xamarin Forms 中的 ContentPage 上的标签绑定(bind)在屏幕上未更新。我去了属性 setter ,发现它是 'Notifying' 请参阅下面的 Console.WriteLine($"{TripTotal}") 语句它确实在启动时更新 OneTime。至 $99.0 这里有什么问题?
From Application output
TripTotal 100
TripTotal 101
TripTotal 102
TripTotal 103
TripTotal 104
TripTotal 105
TripTotal 106
TripTotal 107
TripTotal 108
TripTotal 109
TripTotal 110
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" x:Class="TripCalculator.Views.ExpensePage"
Title="{Binding Title}" x:Name="BrowseItemsPage">
<ContentPage.ToolbarItems>
<ToolbarItem Text="Add" Clicked="AddItem_Clicked" />
</ContentPage.ToolbarItems>
<StackLayout Padding="10">
<StackLayout Orientation="Horizontal" >
<Label Text="TripTotal:" FontSize="Title"/>
<Label Text="{Binding TripTotal, Mode=TwoWay, StringFormat ='${0:F2}'}" x:Name="trip_total" FontSize="Title" HorizontalOptions="End"/>
<Label Text="{Binding TripTotal_str, Mode=TwoWay}" FontSize="Title" HorizontalOptions="End"/>
</StackLayout>
<BoxView BackgroundColor="Black" HeightRequest="2" WidthRequest="500"/>
<ListView x:Name="ItemsListView"
ItemsSource="{Binding SubTotals}"
VerticalOptions="FillAndExpand"
HasUnevenRows="true"
RefreshCommand="{Binding LoadItemsCommand}"
IsPullToRefreshEnabled="true"
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
CachingStrategy="RecycleElement"
ItemSelected="OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="10">
<Label Text="{Binding StudentName}"
LineBreakMode="NoWrap"
Style="{DynamicResource ListItemTextStyle}"
FontSize="Subtitle" />
<Label Text="{Binding Amount, StringFormat ='${0:F2}'}"
Style="{DynamicResource ListItemDetailTextStyle}"
FontSize="Subtitle" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using TripCalculator.Models;
using Newtonsoft.Json;
using Xamarin.Forms;
using System.Windows.Input;
using TripCalculator.Helpers;
using TripCalculator.Views;
namespace TripCalculator.ViewModels
{
public class ExpenseVM : BaseVM
{
public ExpenseVM()
{
Title = "Students";
Expenses = new ObservableCollection<Expense>();
Messages = new ObservableCollection<string>();
SubTotals = new ObservableCollection<SubTotal>();
StudentTotals = new ObservableDictionary<string, double>();
Expenses.CollectionChanged += (s, e) => TripTotal += 1;
MessagingCenter.Subscribe<NewExpensePage, Expense>
(this, "AddItem", async (obj, item) =>
{
var newItem = item as Expense;
await DataSource.AddItemAsync(newItem);
await this.ExecuteLoadItemsCommand();
});
}
#region OBSERVABLES
public ICommand LoadItemsCommand
{
get
{
return new Command (async() => await ExecuteLoadItemsCommand());
}
}
public ICommand UpdateItemCommand
{
get
{
return new Command<object>(async (id) => await ExecuteUpdateItemCommand(id));
}
}
public Command DeleteCommand
{
get
{
return new Command (async () => await ExecuteDeleteCommand());
}
}
private Expense selectedItem;
public Expense SelectedItem { get => selectedItem;
set => SetProperty(ref selectedItem, value); }
private ObservableCollection<Expense> expenses;
public ObservableCollection<Expense> Expenses
{
get => expenses;
set => SetProperty(ref expenses, value);
}
private ObservableCollection<SubTotal> subtotals;
public ObservableCollection<SubTotal> SubTotals
{
get => subtotals;
set => SetProperty(ref subtotals, value);
}
public ObservableCollection<string> Students { get { return QueryDistinctNames(); } }
public ObservableCollection<string> Messages;
private ObservableDictionary<string, double> studentTotals;
public ObservableDictionary<string, double> StudentTotals
{
get => studentTotals;
internal set => SetProperty(ref studentTotals, value);
}
double tripTotal = 99;
public double TripTotal
{
get => tripTotal;
set => SetProperty(ref tripTotal, value);
}
public List<string> ExpenseIds { get { return queryAllExpenseIds(); } }
private void reQueryStudents()
{
var studList = Students;
foreach (string student in studList)
{
studentTotals[student] = QueryStudentTotal(student);
}
//set Notification cyccle
this.SubTotals.Clear();
foreach (var k in studentTotals.Keys)
{
subtotals.Add(new SubTotal { Amount = studentTotals[k], StudentName = k });
}
//TripTotal = QueryTotal();
SubTotals = subtotals;
StudentTotals = studentTotals;
}
public double QueryStudentTotal(string student)
{
return (from exp in Expenses select exp)
.Where(e => e.StudentName == student)
.Sum(e => e.Amount);
}
internal List<string> queryAllExpenseIds()
{
var lst = Expenses.ToList<Expense>();
// Left As Distinct() although there should be no redundant Id's
return lst.Select(x => x.Id).Distinct().ToList();
}
private double QueryTotal()
{
return (from exp in Expenses select exp).Sum(e => e.Amount);
}
private ObservableCollection<string> QueryDistinctNames()
{
var lst = Expenses.ToList<Expense>();
List<string> myStudents = lst.Select(x => x.StudentName).Distinct().ToList();
return myStudents.ToObservableCollection<string>();
}
#endregion
#region CMDS_AND_DATASTORE_OPS
async Task ExecuteLoadItemsCommand()
{
if (IsBusy)
return;
IsBusy = true;
try
{
Expenses.Clear();
if (DataSource != null)
{
var items = await DataSource.GetItemsAsync(true);
double sum = 0;
foreach (var item in items)
{
Expenses.Add(item);
sum += item.Amount;
}
reQueryStudents();
tripTotal = sum;
OnPropertyChanged(nameof(TripTotal));
}else
{ Console.WriteLine("null Data Store"); }
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
finally
{
IsBusy = false;
}
}
async Task ExecuteUpdateItemCommand(object newAmt)
{
if (IsBusy)
return;
IsBusy = true;
try
{
double newCost = (double)newAmt;
Expense newExpense = new Expense
{
Amount = newCost,
StudentName = SelectedItem.StudentName
};
var didUpdate = await DataSource.UpdateItemAsync(SelectedItem, newExpense);
if (didUpdate)
{
await ExecuteLoadItemsCommand();
}
}
catch
{
}
}
private async Task ExecuteDeleteCommand()
{
await DataSource.DeleteItemAsync(SelectedItem.Id);
await ExecuteLoadItemsCommand();
}
#endregion
#region UTIL
public override string ToString()
{
var serializedItem = JsonConvert.SerializeObject(Expenses);
return serializedItem;
}
public void FromString(string json)
{
// Hold your hat a bunch of conversions ahead :)
Expenses = JsonConvert.DeserializeObject<IEnumerable<Expense>>(json)
.ToList()
.ToObservableCollection<Expense>();
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using TripCalculator.Models;
using TripCalculator.Services;
namespace TripCalculator.ViewModels
{
public class BaseVM
{
protected static IDataSource<Expense> DataSource
{
get { return App.DataSource; }
}
bool isBusy = false;
public bool IsBusy
{
get { return isBusy; }
set { SetProperty(ref isBusy, value); }
}
string title = string.Empty;
public string Title
{
get { return title; }
set { SetProperty(ref title, value); }
}
#region INotifyPropertyChanged
protected bool SetProperty<T>(ref T backingStore, T value,
[CallerMemberName]string propertyName = "",
Action onChanged = null)
{
if (EqualityComparer<T>.Default.Equals(backingStore, value))
return false;
backingStore = value;
onChanged?.Invoke();
OnPropertyChanged(propertyName);
if (propertyName=="TripTotal")
{
Console.WriteLine($"TripTotal {value}");
}
return true;
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var changed = PropertyChanged;
if (changed == null)
return;
changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
最佳答案
在 ExecuteLoadItemsCommand() 你需要这样做 TripTotal = sum;
而不是这个tripTotal = sum;
关于xamarin - 1 属性未更新 Xamarin 表单绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60814809/
我有一个 foo 类,它有一个 bar 方法,它接受可调用的东西(函数指针/仿函数)。这个可调用的东西应该作为绑定(bind)元素传递给另一个方法 doit 和第三个方法 bar_cb 方法。 #in
我正在尝试在我的 WPF 4.0 应用程序(使用 VS 2010 Pro RTM)中创建自定义 TabItem 模板/样式,但尽管一切似乎都正常工作,但我注意到跟踪窗口中存在绑定(bind)错误。 我
作为一名刚接触 Android 的开发人员,我想我可能误解了绑定(bind)服务。 我创建了一项服务来结束对服务器的访问。作为此服务的一部分,该服务正在监听多播地址,以识别本地网络上的设备何时出现和消
这个问题在这里已经有了答案: What is the use of the JavaScript 'bind' method? (23 个回答) 关闭 7 年前。 所以我一直在尝试了解一些 JS 上
我不明白这三种语法之间的区别: where a = f (b) do a <- f (b) do let a = f (b) 我确实明白了a <- f(b)与其他两个不同,在大多数情况下,我尝试了所有
我在将 Cocoa 项目从手动同步接口(interface)模型转换为绑定(bind)模型时遇到问题,这样我就不必担心接口(interface)粘合代码。 我关注了 CocoaDevCentral C
我正在尝试找出一种好的方法来对处理大数据集的代码进行并行化,然后将结果数据导入 RavenDb。 数据处理受 CPU 限制和数据库导入 IO 限制。 我正在寻找一种解决方案,以对 Environmen
我正在 foreach 循环中生成单选按钮。我试图将选中的属性绑定(bind)到父级中的基本可观察值。不幸的是,当单击单选按钮时,父级的属性似乎没有在单击处理程序中更新。 基于一些previous w
在我的 Windows Phone 应用程序中,我有两个 LongListSelectors并排在页面上。我想做到这一点,以便当用户滚动其中一个时,另一个滚动相同的量。 两个 LongListSele
我在网上看到这个问题准备面试: Given a non-preemptive kernel which type of process will get affected morein terms o
我有一个 foreach 绑定(bind),如下所示: Summary Permitting 原因是有两个选项卡始终存在,并且我根据是否添加了其他选项卡来添加其他选项
任何人都有绑定(bind)相同的情况DataContext到 TextBlock 中的 Text 属性(例如)。 我必须分配 DataContext以我的风格反射(reflect)基于 Datacon
给定以下代码: Login 和下面的javascript $(function () { $('#btnLogin').click(function () { co
我使用 boost::asio 创建了一个服务器。我在绑定(bind)到端点时遇到问题。所以,如果我在构造函数中初始化一个接受器: Server::Server(QWidget *parent) :
我正在将现有项目从 MySQL 转换为 Postgres。代码中有相当多的原始 SQL 文字使用 ? 作为占位符,例如 SELECT id FROM users WHERE
似乎在绑定(bind)某些数据时出错了,有人可以帮我解决我哪里出错了,尽管我无法弄清楚。 真的不需要在这里显示太多,这是 Binding,我已经通过移除背景并在其中放置颜色来测试背景,效果很好。 编辑
我正在尝试使用 wcf 构建一个 http 监听器(web 服务)。这个监听器是一个更大的桌面应用程序的一部分。此桌面应用程序还会调用 http 监听器。 当监听器接收到数据时,它应该被传递到桌面应用
嘿嘿。 我正在使用 Node.JS 和 child_process 来生成 bash 进程。我试图了解我是否正在执行 I/O 绑定(bind)、CPU 绑定(bind)或两者兼而有之。 我正在使用 p
尝试执行以下操作并出现“Got interpolation ({{}}) where expression was expected”错误。 {{item.name}} 谢谢!
我有一个导入的 Java 库,它是我解决方案中的“绑定(bind)库”项目。 我正在尝试从解决方案中的另一个项目绑定(bind)到第 3 方库中的服务。 第 3 方库文档 [在 java 中] 非常简
我是一名优秀的程序员,十分优秀!