如何有效地将值保存在OnPropertyChangedEvent中?
我正在实现MVVM并试图从我的Xaml页面的Switch中保存一个值。我想将这个值存储到应用程序的属性中。目前,我再次保存触发器OnPropertyChanged的值,并且该值永远不会更新。如何有效地将值保存在OnPropertyChangedEvent中?
我有一个BaseViewModel类:
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected void SetValue<T>(ref T backingField, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(backingField, value))
return;
backingField = value;
OnPropertyChanged(propertyName);
}
}
在我的ViewModel:
private bool _sizeToggled;
public bool SizeToggled
{
get { return _sizeToggled; }
set
{
SetValue(ref _sizeToggled, value);
OnPropertyChanged(nameof(SizeToggled));
SaveValue();
}
}
private void SaveValue(){
Application.Current.Properties["SizeToggled"] = SizeToggled;
}
我的XAML代码:
<StackLayout Orientation="Horizontal" Padding="10,0,0,0">
<Label Text="Size:" FontAttributes="Bold"/>
<Switch IsToggled="{Binding SizeToggled}"
HorizontalOptions="EndAndExpand"/>
</StackLayout>
我如何能实现我的SaveValue()方法,当值更新时,应用程序的属性将被存储/更新?
看起来在同时保存多个应用程序属性时存在问题。 分离属性出保存方法和
developer.xamarin.com/guides/xamarin-forms/...尝试添加该Application.Current.SavePropertiesAsync() - 科尔夏
强制拯救解决了问题。
你是否检查过虚拟机是否真的是你的datacontext?
是的,我的BindingContext设置正确。更改完成后,我的断点在ViewModel中正确触发。当我调用SaveValue()方法时,问题是OnPropertyChanged被第二次触发。 – Zithro
您是否尝试更改绑定模式? – user1032412
是的,我试过OneWay,OneWayToSource和TwoWay。所有结果都一样。 – Zithro
https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/application-class/#Persistence尝试添加此'Application.Current.SavePropertiesAsync()' –
添加此帮助,除了不同时保存多个属性。谢谢! – Zithro