当我向后滑动 [PopAsync() ] 时,有没有办法更新有界数据
Is there a way to update bounded data when I swipe back [PopAsync() ]
为了提供一些上下文,我正在编写一个 Xamarin.Forms 应用程序并利用 INotifyPropertyChanged 的数据绑定。目前我在按钮上显示了一个库存计数器。此按钮上的文本显示有界 "Count" 变量(例如,当前库存:35)。当我按下按钮时,我将一个屏幕推送到导航堆栈上,允许我编辑这个 "Count" 变量。我使用这样的 class 实现
public class UserInventory : INotifyPropertyChanged
{
private int count = 0;
// Declare the event
public event PropertyChangedEventHandler PropertyChanged;
public int Count
{
get => Preferences.Get(nameof(Count),0);
set
{
if (count == value || value <1)
return;
Preferences.Set(nameof(Count), value);
//count = value;
//Application.Current.Properties["Count"] = count;
OnPropertyChanged(nameof(Count));
//OnPropertyChanged(nameof(displayName));
}
}
public UserInventory()
{
}
void OnPropertyChanged(string count)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(count));
}
}
我根据 Xamarin <ContentPage.BindingContext>
<local:UserInventory />
</ContentPage.BindingContext>
上的教程在 Xaml 中添加了这个 class
所以变量被正确地限制了,我在当前页面上看到更新或者当我推送新页面时没有问题。问题是当我在 iOS 上向后滑动时,前一个屏幕上的按钮 "Current Inventory: 35" 没有更新以反映新的更改。如果我按下那个屏幕,更改就会反映出来。
有没有办法确保在您返回时更新有界数据 (PopAsync())?
尝试覆盖页面的 OnAppearing() 方法并从那里调用 OnPropertyChanged。
假设'UserInventory'绑定的虚拟机.....
public partial class Page1:ContentPage
{
public Page1()
{
InitializeComponent();
VM = (UserInventory)BindingContext;
}
public UserInventory VM { get; }
protected override void OnAppearing()
{
VM.Notify();
base.OnAppearing();
}
}
.
public class UserInventory: INotifyPropertyChanged
{
........
public void Notify()
{
OnPropertyChanged(nameof(Count));
}
}
为了提供一些上下文,我正在编写一个 Xamarin.Forms 应用程序并利用 INotifyPropertyChanged 的数据绑定。目前我在按钮上显示了一个库存计数器。此按钮上的文本显示有界 "Count" 变量(例如,当前库存:35)。当我按下按钮时,我将一个屏幕推送到导航堆栈上,允许我编辑这个 "Count" 变量。我使用这样的 class 实现
public class UserInventory : INotifyPropertyChanged
{
private int count = 0;
// Declare the event
public event PropertyChangedEventHandler PropertyChanged;
public int Count
{
get => Preferences.Get(nameof(Count),0);
set
{
if (count == value || value <1)
return;
Preferences.Set(nameof(Count), value);
//count = value;
//Application.Current.Properties["Count"] = count;
OnPropertyChanged(nameof(Count));
//OnPropertyChanged(nameof(displayName));
}
}
public UserInventory()
{
}
void OnPropertyChanged(string count)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(count));
}
}
我根据 Xamarin <ContentPage.BindingContext>
<local:UserInventory />
</ContentPage.BindingContext>
上的教程在 Xaml 中添加了这个 class
所以变量被正确地限制了,我在当前页面上看到更新或者当我推送新页面时没有问题。问题是当我在 iOS 上向后滑动时,前一个屏幕上的按钮 "Current Inventory: 35" 没有更新以反映新的更改。如果我按下那个屏幕,更改就会反映出来。
有没有办法确保在您返回时更新有界数据 (PopAsync())?
尝试覆盖页面的 OnAppearing() 方法并从那里调用 OnPropertyChanged。
假设'UserInventory'绑定的虚拟机.....
public partial class Page1:ContentPage
{
public Page1()
{
InitializeComponent();
VM = (UserInventory)BindingContext;
}
public UserInventory VM { get; }
protected override void OnAppearing()
{
VM.Notify();
base.OnAppearing();
}
}
.
public class UserInventory: INotifyPropertyChanged
{
........
public void Notify()
{
OnPropertyChanged(nameof(Count));
}
}