代码之家  ›  专栏  ›  技术社区  ›  user2908206

来自设置的WPF触发器。设置变量

  •  0
  • user2908206  · 技术社区  · 7 年前

    我补充道 bool 变量输入到my Settings.settings 用于存储用户配置首选项的文件:

    enter image description here

    在代码隐藏中,我以这种方式进行了更改:

    Properties.Settings.Default.autoCheckForUpdates = true;
    

    是否可以添加此 布尔 我的控制变量 trigger 使用 XAML ?

    2 回复  |  直到 3 年前
        1
  •  3
  •   Clemens    7 年前

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

    xmlns:properties="clr-namespace:YourAppNamespace.Properties"
    ...
    
    <DataTrigger Binding="{Binding Path=(properties:Settings.Default).autoCheckForUpdates}"
                 Value="True">
        <Setter .../>
    </DataTrigger>
    
        2
  •  1
  •   Stefan    7 年前

    正如承诺的那样,overkill版本对你的问题没有意义,但可能会在另一方面帮助你:一个简单的视图模型,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}"/>