绑定到“设置”中定义的值

时间:2009-05-10 09:55:29

标签: wpf binding appsettings

在WPF中,我可以使用与“设置”中定义的值绑定吗?如果可以,请提供样品。

4 个答案:

答案 0 :(得分:116)

首先,您需要添加一个自定义XML命名空间,用于设计定义设置的命名空间:

xmlns:properties="clr-namespace:TestSettings.Properties"

然后,在您的XAML文件中,使用以下语法访问默认设置实例:

{x:Static properties:Settings.Default}

所以这是最终的结果代码:

<ListBox x:Name="lb"
         ItemsSource="{Binding Source={x:Static properties:Settings.Default},
                               Path=Names}" />

来源:WPF - How to bind a control to a property defined in the Settings?


注意:正如@Daniel和@nabulke所指出的,不要忘记将设置文件的访问修饰符设置为Public范围User

答案 1 :(得分:29)

上面的解决方案确实有效,但我发现它非常冗长......您可以使用自定义标记扩展,可以像这样使用:

<ListBox x:Name="lb" ItemsSource="{my:SettingBinding Names}" />

以下是此扩展程序的代码:

public class SettingBindingExtension : Binding
{
    public SettingBindingExtension()
    {
        Initialize();
    }

    public SettingBindingExtension(string path)
        :base(path)
    {
        Initialize();
    }

    private void Initialize()
    {
        this.Source = WpfApplication1.Properties.Settings.Default;
        this.Mode = BindingMode.TwoWay;
    }
}

此处有更多详情:http://www.thomaslevesque.com/2008/11/18/wpf-binding-to-application-settings-using-a-markup-extension/

答案 2 :(得分:8)

@ CSharper的答案对我在VB.NET中编码的WPF应用程序不起作用(不是C#,不像其他WPF应用程序的99.999%),因为我得到一个持久的编译器错误抱怨Settings找不到在MyApp.Properties命名空间中,即使在重建之后也不会消失。

在网上搜索之后,相反,对我来说,在我的应用程序的主窗口XAML文件中使用默认创建的local XAML命名空间是有用的:

<Window
    <!-- Snip -->
    xmlns:local="clr-namespace:MyApp"
    <!-- Snip -->
><!-- Snip --></Window>

...并使用以下内容通过它绑定我的设置(其中MyBooleanSetting是我在类型Boolean和范围User的项目属性中定义的设置,默认使用Friend访问权限改性剂):

<CheckBox IsChecked="{Binding Source={x:Static local:MySettings.Default}, Path=MyBooleanSetting, Mode=TwoWay}"
          Content="This is a bound CheckBox."/>

为确保实际保存设置,请务必致电

MySettings.Default.Save()

...代码隐藏的某处(例如Me.Closing文件的MainWindow.xaml.vb事件。)

(感谢此Visual Studio forum post获得灵感;请参阅Muhammad Siddiqi的回复。)

答案 3 :(得分:0)

这是我绑定用户设置的方式:

通过键入propdp,然后按两次Tab键来生成依赖项变量。

    public UserSettings userSettings
    {
        get { return (UserSettings)GetValue(userSettingsProperty); }
        set { SetValue(userSettingsProperty, value); }
    }
    public static readonly DependencyProperty userSettingsProperty =
        DependencyProperty.Register("userSettings", typeof(UserSettings), typeof(MainWindow), new PropertyMetadata(UserSettings.Default));

现在,您可以通过以下方式绑定userSettings

Value="{Binding userSettings.SomeUserSettingHere, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

并确保在更改用户设置时或退出时保存用户设置:

UserSettings.Default.Save();