双向绑定到用户设置?

时间:2012-03-26 13:46:07

标签: c# winforms

我的Properties / Settings.settings文件中有一个布尔值设置,它基本上按用户“从右到左”或“从左到右”显示模式存储。

我的功能区中有一个复选框,我已绑定到该值。然而,似乎绑定只是一种方式。有没有什么方法可以做到这两种方式,而无需编写代码来保持设置?

澄清

我已成功将应用程序配置为在首次加载时绑定到设置。问题是这是一个单向绑定,即更改设置时UI更新,但更改UI时设置不会更改。

因此我的问题是......如何配置针对用户设置的双向绑定?

我可以编写事件处理程序来手动执行所有操作,但我认为这无法使用绑定。

2 个答案:

答案 0 :(得分:4)

好的,经过一些挖掘后,您似乎需要在某种程度上实现这一点,但它可能不像您希望的那样干净。基本上,你的绑定对象必须实现INotifyPropertyChanged(这是一直给我带来麻烦的部分......我认为CheckBox必须实现这个接口,但它是复选框所绑定的对象),{ {1}}。所以,您需要做的就是以下

挂钩Property.Settings.Default的OnPropertyChanged事件:

Properties.Settings.Default

然后,当任何绑定属性发生更改时,只需调用Save方法:

Properties.Settings.Default.PropertyChanged +=
    new PropertyChangedEventHandler(Default_PropertyChanged);

基本上,绑定对象时,它会相应地更改void Default_PropertyChanged(object sender, PropertyChangedEventArgs e) { Properties.Settings.Default.Save(); } 。它只是不会在每个更改上调用Settings.Default.[Setting]。你必须实现这一部分。

答案 1 :(得分:1)

这只能通过使用视觉工作室设计师在我的机器上运行,因此我会尝试排除这些内容。

首先,我会在常规表单上设置复选框,看看是否有帮助。您使用哪个组件/库用于功能区?你在使用DevExpress吗?我知道DevExpress没有Ribbon控件的数据绑定支持。您是否正在使用其他组件或自己的​​代码?

其次,请注意事件的顺序并不像您预期​​的那样。很可能首先触发CheckedChanged事件,然后将值与Settings同步。所以我没有使用CheckedChanged事件,而是使用一个单独的按钮来获取焦点,并在值处于同步状态时检查该处理程序。

第三,您还可以覆盖CheckedChanged事件并将新的数据绑定值推送到基础数据源。我已经为许多控件做了这件事,并且像魅力一样。