从主页绑定到 Template10 设置
本文关键字:Template10 设置 绑定 主页 | 更新日期: 2023-09-27 18:36:36
到目前为止,我喜欢Template10,非常好。不过,我对如何绑定主页上的设置值有点卡住了。我添加了一个新的布尔设置,该设置可以正确存储。在我的主页上,我有一个可见性绑定到设置:
Visibility="{Binding UseAmbientLightSensor, Converter={StaticResource CollapsedWhenFalseConverter}}"
这适用于按预期启动的应用,MainPageViewModel 从"设置"中读取值,并且网格根据该设置可见或折叠。
但是,如果我转到设置页面并更改该值,我似乎无法让此绑定"侦听"设置,当我返回主页时,可见性不会改变。它仅在我重新启动应用程序时才有效。
在原版 Template10 安装中,这类似于将主页上的一个小徽标绑定到设置页面中的"使用LightThemeButton"设置,该设置会根据该设置而变化。
好的
,所以我想这是"官方"答案。但许多方法是有效的。这个与模板最匹配。我会这样做:
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)。
祝你好运。
有两种可能的情况可能不会发生:
- 在
- 更新布尔值时引发属性更改事件。
- 将绑定设置为双向模式。
为此,更改Visibility
属性的绑定模式
Visibility="{Binding UseAmbientLightSensor, Mode=TwoWay, Converter={StaticResource CollapsedWhenFalseConverter}}"
这将告知 xaml 侦听视图模型中属性的任何更改。
然后,您需要告诉视图模型何时让 XAML 视图知道其更改,如果您使用的是 Template10,则可以按如下方式完成:
private bool useAmbientLightSensor;
public TodoListControlViewModel UseAmbientLightSensor
{
get
{
return this.useAmbientLightSensor;
}
set
{
this.Set(ref this.useAmbientLightSensor, value);
}
}
视图模型需要从 ViewModelBase
类扩展,该类提供引发OnPropertyChanged
事件的 Set
方法,允许视图知道视图模型中的任何更改。
有关详细信息,请查看INotifyPropertyChanged
接口及其实现。