【问题标题】:MVVM Binding to Properties.SettingsMVVM 绑定到 Properties.Settings
【发布时间】:2011-02-22 06:06:45
【问题描述】:

在 MVVM 方法中,我将如何绑定到 Properties.Settings?有没有办法将 C# 代码中的属性(在 ViewModel 中)绑定到另一个属性(Properties.Settings.Default),或者我应该只绑定到标准属性并在保存时确保每个属性都手动传播到 Properties.Settings?

【问题讨论】:

    标签: c# wpf mvvm properties settings


    【解决方案1】:

    类似于后者:通过适合视图的 ViewModel 上的属性公开 Properties.Settings.Default 中的设置。

    public class SomeViewModel
    {
        public int SomeProperty
        {
            get
            { 
                return Properties.Settings.Default.SomeProperty; 
            }
            set
            { 
                Properties.Settings.Default.SomeProperty = value; 
            }
        }
    }
    

    ...或实现该效果的代码。

    【讨论】:

    • 这正是我试图避免的那种样板代码:您没有添加任何新内容。为了使其正常工作,您必须在更改属性中的值时触发 INPC。此外,您必须监听模型中的属性更改(在本例中为设置),并在底层模型更改时触发 INPC。所有这一切让您绑定到 ViewModel.Property 而不是 Settings.Property 或 ViewModel.Settings.Property?
    【解决方案2】:

    设置实现了 INPC,因此您可以简单地直接绑定到视图中的设置。请记住,您必须手动调用设置上的 Save() 才能将它们实际保存到隔离存储中。

    【讨论】:

    • 实际上,我不建议直接绑定到设置,因为它不太像 MVVM。一个例外可能是视图只允许显示/编辑设置中的内容,但即便如此我也不愿意考虑 Properties.Settings.Default 一个合适的 ViewModel。
    • MVVM 在某些方面非常主观。如果设置(基本上是模型的(部分))具有必要的属性,我认为直接绑定到它们没有问题。对于一些已经属于正确类型的属性,我还直接绑定到我的模型。我认为简单地重新实现所有模型属性的样板 VM 代码没有用。
    • 你如何去测试视图实际上得到了正确的设置?你不能因为你已经通过视图模型走捷径......
    • @Peter 为什么会这样?将这些设置视为第二个 ViewModel。
    • 您始终可以使用 ViewModel 通过属性公开“Properties.Settings.Default”对象。然后将控件绑定到各个属性,这应该提供必要的抽象,并且还允许您命令 Save() 方法。
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2020-02-21
    • 2021-10-16
    • 2023-03-15
    • 2018-12-13
    • 2011-09-23
    相关资源
    最近更新 更多