如何在OnPropertyChangedEvent中有效保存值?

时间:2017-11-18 05:59:24

标签: xamarin xamarin.ios xamarin.forms xamarin.android

我正在实现MVVM并尝试从我的Xaml页面的Switch中保存一个值。我想将此值存储到Application的属性中。目前,保存我所在的值再次触发OnPropertyChanged,并且该值永远不会更新。

我有一个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()方法,以便在更新值时存储/更新应用程序的属性?

2 个答案:

答案 0 :(得分:0)

你检查过vm真的是你的datacontext吗?

答案 1 :(得分:0)

在同时保存多个应用程序属性时似乎存在问题。 将属性与save方法和

分开
  

developer.xamarin.com/guides/xamarin-forms / ...尝试添加此Application.Current.SavePropertiesAsync() - Cole Xia

强制保存解决了问题。