Лучший способ связать свойства WPF с ApplicationSettings в C#?

48
задан Community 23 May 2017 в 01:54
поделиться

4 ответа

Можно непосредственно связать со статическим объектом, созданным Visual Studio.

В Вашем объявлении окон добавьте:

xmlns:p="clr-namespace:UserSettings.Properties"

, где UserSettings пространство имен приложения.

Тогда можно добавить привязку к корректной установке:

<TextBlock Height="{Binding Source={x:Static p:Settings.Default}, 
           Path=Height, Mode=TwoWay}" ....... />

Теперь можно сохранить настройки на пример при закрытии приложения:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    Properties.Settings.Default.Save();
    base.OnClosing(e); 
}
103
ответ дан wonea 7 November 2019 в 12:12
поделиться

Самый легкий путь состоял бы в том, чтобы связать с объектом, который представляет Ваши параметры настройки приложения как свойства или включать тот объект как StaticResource и связывать с этим.

Другое направление, которое Вы могли взять, является созданием Ваше собственное Расширение Разметки , таким образом, можно просто использовать PropertyName = "{ApplicationSetting SomeSettingName}". Для создания пользовательского расширения разметки, необходимо наследовать MarkupExtension и украсить класс атрибут MarkupExtensionReturnType. John Bowen имеет сообщение при создании пользовательского MarkupExtension, который мог бы сделать процесс немного более четким.

5
ответ дан Richard Szalay 7 November 2019 в 12:12
поделиться

Крис, я не уверен, что это - лучший способ связать ApplicationSettings, но это - то, как я сделал это в Остроумный .

1) Создают свойство зависимости для установки, которую Вы хотите связать в window/page/usercontrol/container. Это - случай, у меня есть пользователь, устанавливающий для игры звуков.

    public bool PlaySounds
    {
        get { return (bool)GetValue(PlaySoundsProperty); }
        set { SetValue(PlaySoundsProperty, value); }
    }

    public static readonly DependencyProperty PlaySoundsProperty =
        DependencyProperty.Register("PlaySounds", typeof(bool), typeof(Options),
        new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnPlaySoundsChanged)));

    private static void OnPlaySoundsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        Properties.Settings.Default.PlaySounds = (bool)args.NewValue;
        Properties.Settings.Default.Save();
    }

2) В конструкторе, инициализируйте значение свойства для соответствия параметрам настройки приложения

      PlaySounds = Properties.Settings.Default.PlaySounds;

, 3) Связывают свойство в XAML

      <CheckBox Content="Play Sounds on new Tweets" x:Name="PlaySoundsCheckBox" IsChecked="{Binding Path=PlaySounds, ElementName=Window, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

, который можно загрузить полное Остроумный источник , чтобы видеть его в действии или просмотреть просто эти код для окна настроек .

3
ответ дан Alan Le 7 November 2019 в 12:12
поделиться

Также читайте этот статья о том, как она сделана в BabySmash

, который только необходимо поддержать, Настройки с ДЕЛАЮТ (Как пример Alan) при необходимости в уведомлении об изменении! при привязке с ПОСТЕПЕННО будет также работать класс Настроек!

0
ответ дан rudigrobler 7 November 2019 в 12:12
поделиться