从主页

时间:2016-02-29 05:51:04

标签: c# winrt-xaml win-universal-app template10

到目前为止,我很喜欢Template10,非常好。 我对如何绑定到主页面上的设置值有点困惑。 我添加了一个正确存储的新bool设置。 在我的主页面上,我有一个可见性绑定到设置:

Visibility="{Binding UseAmbientLightSensor, Converter={StaticResource CollapsedWhenFalseConverter}}"

这适用于应用程序按预期启动,MainPageViewModel从“设置”中读取值,并根据该设置显示或折叠网格。

然而,我似乎无法将这种约束力与“听”#39;对于该设置,如果我转到设置页面并更改该值,当我返回主页面时,可见性不会改变。它仅在我重新启动应用程序时才有效。

在vanilla Template10安装中,这类似于将MainPage上的一个小徽标绑定到' UseLightThemeButton'设置页面中的设置根据该设置进行更改..

2 个答案:

答案 0 :(得分:2)

好的,所以我猜这是“官方”的答案。但许多方法都是有效的。这个与模板最匹配。我会这样做:

public class MainPageViewModel : ViewModelBase
{
    Services.SettingService.SettingService _SettingService;

    public MainPageViewModel()
    {
        _SettingService = Services.SettingService.SettingService.Instance;
    }

    public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        Windows.Storage.ApplicationData.Current.DataChanged += SettingsChanged;
        await Task.CompletedTask;
    }

    public override async Task OnNavigatedFromAsync(IDictionary<string, object> pageState, bool suspending)
    {
        Windows.Storage.ApplicationData.Current.DataChanged -= SettingsChanged;
        await Task.CompletedTask;
    }

    private void SettingsChanged(Windows.Storage.ApplicationData sender, object args)
    {
        RaisePropertyChanged(nameof(FontSize));
    }

    public double FontSize { get { return _SettingService.FontSize; } }
}

使用该视图模型,您可以轻松绑定到某个设置(在本例中为FontSize)。

祝你好运。

答案 1 :(得分:0)

有两种可能不会发生的情况:

  • 当您的bool值更新时,提升属性更改事件。
  • 将绑定设置为双向模式。

为此,请更改Visibility属性

的绑定模式
Visibility="{Binding UseAmbientLightSensor, Mode=TwoWay, Converter={StaticResource CollapsedWhenFalseConverter}}"

这将告诉收听视图模型中属性的任何更改。

然后你需要告诉View模型何时让XAML视图知道它的变化,如果你使用的是Template10,那么可以按如下方式完成:

private bool useAmbientLightSensor;

public TodoListControlViewModel UseAmbientLightSensor
{
    get
    {
        return this.useAmbientLightSensor;
    }

    set
    {
        this.Set(ref this.useAmbientLightSensor, value);
    }
}

视图模型需要从ViewModelBase类扩展,该类提供引发Set事件的OnPropertyChanged方法,允许视图知道视图模型中的任何更改。 / p>

有关详细信息,请查看INotifyPropertyChanged interfaceits implementation