Привязка к значению, определенному в настройках



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

554   3  

3 ответов:

во-первых, вам нужно добавить пользовательское пространство имен 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 и Scope до User

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

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

ответ@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 и область пользователя, с модификатором доступа к другу по умолчанию):

<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 file).

(кредит это сообщение на форуме Visual Studio для вдохновения; см. ответ Мухаммад Сиддики.)

Comments

    Ничего не найдено.