2017-11-18 177 views
0

我正在实现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()方法,当值更新时,应用程序的属性将被存储/更新?

+0

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/application-class/#Persistence尝试添加此'Application.Current.SavePropertiesAsync()' –

+0

添加此帮助,除了不同时保存多个属性。谢谢! – Zithro

回答

0

看起来在同时保存多个应用程序属性时存在问题。 分离属性出保存方法和

developer.xamarin.com/guides/xamarin-forms/...尝试添加该Application.Current.SavePropertiesAsync() - 科尔夏

强制拯救解决了问题。

0

你是否检查过虚拟机是否真的是你的datacontext?

+0

是的,我的BindingContext设置正确。更改完成后,我的断点在ViewModel中正确触发。当我调用SaveValue()方法时,问题是OnPropertyChanged被第二次触发。 – Zithro

+0

您是否尝试更改绑定模式? – user1032412

+0

是的,我试过OneWay,OneWayToSource和TwoWay。所有结果都一样。 – Zithro

相关问题