2017-11-18 174 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

相關問題