如何将用户设置 (Properties.Settings.Default) 绑定到 WPF 控件?

How can I bind user settings (Properties.Settings.Default) to WPF controls?

我想为用户设置创建一个 WPF window,并将控件绑定到 Properties.Settings.Default 中定义的用户设置。 听起来很简单,就像几乎所有应用程序中所做的一样。然而,我似乎无法实现双向绑定,即控件显示值,但用户输入未写回设置对象。 这是带有 canvas 的 XAML 的一部分,它定义了数据上下文并包含一些控件。

<Canvas x:Name="CanvasMain">
    <Canvas.DataContext>
        <Properties:Settings/>
    </Canvas.DataContext>
    <CheckBox x:Name="chkThingEnabled" Content="Thing" Height="20" Canvas.Left="19" Canvas.Top="64" Width="106" IsChecked="{Binding ThingEnabled}"/>
    <TextBox Canvas.Left="19" Text="{Binding TestText}" Canvas.Top="104" Width="120"/>
</Canvas>

只需在项目的默认设置网格中输入设置即可: ThingEnabled:类型 = 布尔值,范围 = 用户,值 = 假 测试文本:类型 = 字符串,范围 = 用户,值 =“测试”

如何进行数据绑定,以便将对控件值的更改写入设置的绑定属性?

这样的表达
<Properties:Settings/>

将创建设置的新实例 class。

为了绑定到命名空间 YourApplication.PropertiesSettings class 的静态 Default 属性,您需要一个适当的 XAML 命名空间声明和适当的绑定表达式,括号中包含静态 属性 路径。

您还应该考虑使用合适的布局面板。 Canvas 在这里不正确。

像这样的东西应该可以工作:

<Window ...
    xmlns:properties="clr-namespace:YourApplication.Properties">

    <StackPanel DataContext="{Binding Path=(properties:Settings.Default)}">

        <CheckBox IsChecked="{Binding ThingEnabled}" .../>
        <TextBox Text="{Binding TestText}" .../>
    </StackPanel>
</Window>

您需要调用 Properties.Settings.Default.Save() 方法使设置在关闭您的应用程序之前的某个时间保持不变。参见 How To: Write User Settings at Run Time with C#

在实践中,这种方法不太方便,因为用户设置文件的路径取决于您的应用程序的版本号,并且在您更改版本时不会传递到更新的版本。