来自Settings.settings变量的WPF触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自Settings.settings变量的WPF触发器相关的知识,希望对你有一定的参考价值。

我将bool变量添加到我的Settings.settings文件中以存储用户配置首选项:

enter image description here

在代码背后,我正在改变这种方式:

Properties.Settings.Default.autoCheckForUpdates = true;

是否有可能使用bool将此trigger var添加到我的对照XAML

答案

下面显示的DataTrigger有效。您不需要具有属性更改通知的视图模型,因为Settings类已实现INotifyPropertyChanged。

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

<DataTrigger Binding="{Binding Path=(properties:Settings.Default).autoCheckForUpdates}"
             Value="True">
    <Setter .../>
</DataTrigger>
另一答案

正如所承诺的那样,矫枉过正的版本对你的问题没有意义,但可能会以另一种方式帮助你:一个带有INotifyPropertyChanged的简单视图模型。我将用一些绑定来扩展示例。

你的viewmodel:

public class SettingsViewModel : INotifyPropertyChanged
{
    private bool _autoUpdate;
    public SettingsViewModel()
    {
        //set initial value
        _autoUpdate = Properties.Settings.Default.autoCheckForUpdates;
    }

    public bool AutoCheckForUpdates 
    {
        get { return _autoUpdate; }
        set
        {
            if (value == _autoUpdate) return;
            _autoUpdate= value;
            Properties.Settings.Default.autoCheckForUpdates = value;
            Properties.Settings.Default.Save();
            OnPropertyChanged();
        }
    }

    //the INotifyPropertyChanged stuff
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}    

在您的XAML背后的代码中:

public SettingsWindow()
{
    InitializeComponent();
    this.DataContext = new SettingsViewModel();
}

现在,在您的XAML中,您可以通过文本框绑定到此属性,例如:

<CheckBox IsChecked="{Binding AutoCheckForUpdates}"/>

以上是关于来自Settings.settings变量的WPF触发器的主要内容,如果未能解决你的问题,请参考以下文章

查看 Properties.Settings.Default 变量

哪个意图应该打开数据使用屏幕(来自设置)

如何使 Settings.settings 数据持久化

如何在 DEBUG 和 RELEASE 模式之间切换 Settings.settings?

Django的settings源码分析

Visual Studio 项目:缺少 Properties/Settings.settings