【发布时间】:2017-05-25 10:50:59
【问题描述】:
我一直在努力研究如何最好地与 WinRT/UWP 应用程序中绑定级别的设置“交互”。我一直在寻找这方面的最佳实践,但我还没有找到明确的答案。到目前为止,我在我的应用中所做的如下:
- 定义一个实现 INotifyPropertyChanged 的 BindableBase。
-
创建一个继承自 BindableBase 的 AppSettings 类,看起来有点像这样:
public class AppSettings : BindableBase { ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; public string MySetting { get { if (!localSettings.Values.ContainsKey("MySetting")) localSettings.Values["MySetting"] = "Some default value"; return localSettings.Values["MySetting"].ToString(); } set { localSettings.Values["MySetting"] = value; RaisePropertyChanged(); } } } -
定义一个具有 AppSettings 属性的 ViewModel:
public class SettingsViewModel { public AppSettings Settings { get; set; } = new AppSettings(); } -
绑定到视图中的设置属性:
<TextBlock Text="{Binding Settings.MySetting, Mode=TwoWay}">
我过去曾见过并使用过具有设置服务的实现,但这些应用程序不需要更改设置即可立即生效。所以我基本上要问的是:如果对设置的更改应该立即生效,那么上述实现是绑定到设置的好方法吗?如果没有,你有什么推荐的?
【问题讨论】:
-
相关:Best practice zombies 另外,可以使用您的意思进行澄清生效。你的意思是立即得救?我知道对于 WPF,框架中没有任何东西可以为您做任何事情。你似乎已经有了一些应该工作的东西(ish?)。如果它不能满足您的需求,请更改代码以使其正常运行。
-
我认为您的实现很好,并且可以根据您的情况进行操作。如果您需要立即应用每个设置(而不是单击保存按钮),那么您必须在属性集中分配新值(就像您一样)。届时将触发任何订阅的属性集更改的侦听器。
-
@Will 我不是在寻找最佳实践,但如果我的实现有问题,因为我觉得它在性能方面效率不高。
-
你觉得?或者你知道吗?不要感觉。获取一个工具(不要问,我没有),它可以衡量性能并确定可以改进的地方。我们所能做的就是猜测。
标签: c# xaml mvvm windows-runtime uwp