В WPF, могу ли я использовать привязку со значениями, определенными в настройках? Если это возможно, укажите образец.
Привязать к значению, определенному в настройках
Ответ 1
Во-первых, вам нужно добавить собственное пространство имен 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
Ответ 2
Решение выше работает, но я нахожу его довольно подробным... вместо этого вы можете использовать собственное расширение разметки, которое можно использовать следующим образом:
<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/
Ответ 3
@CSharper ответ не работал для моего приложения WPF, закодированного в VB.NET(не С#, в отличие от, видимо, 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
).
(запомните это сообщение сообщение в Visual Studio для вдохновения, см. ответ Мухаммада Сиддики.)