Привязать к значению, указанному в настройках - PullRequest
71 голосов
/ 10 мая 2009

Можно ли в WPF использовать привязку со значениями, определенными в настройках? Если это возможно, предоставьте образец.

Ответы [ 3 ]

116 голосов
/ 10 мая 2009

Во-первых, вам нужно добавить собственное пространство имен 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 - Как связать элемент управления со свойством, определенным в настройках?


Примечание: Как отметили @Daniel и @nabulke, не забудьте установить Модификатор доступа вашего файла настроек на Public и Область действия на User

29 голосов
/ 11 мая 2009

Решение, приведенное выше, работает, но я нахожу его довольно многословным ... вместо этого вы можете использовать собственное расширение разметки, которое можно использовать так:

<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/

8 голосов
/ 24 февраля 2016

@ Ответ CSharper не сработал для моего WPF-приложения, написанного на VB.NET (не на C #, в отличие от, по-видимому, 99,999% других WPF-приложений), поскольку я получил постоянную ошибку компилятора с жалобой на то, что Settings не удалось найти в MyApp.Properties пространство имен, которое не исчезнет даже после перестройки.

После многих поисков в Интернете у меня сработало использование пространства имен local XAML, созданного по умолчанию в файле 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 для вдохновения; см. Ответ Мухаммеда Сиддики.)

...