我的Properties / Settings.settings文件中有一个布尔值设置,它基本上按用户“从右到左”或“从左到右”显示模式存储。
我的功能区中有一个复选框,我已绑定到该值。然而,似乎绑定只是一种方式。有没有什么方法可以做到这两种方式,而无需编写代码来保持设置?
澄清
我已成功将应用程序配置为在首次加载时绑定到设置。问题是这是一个单向绑定,即更改设置时UI更新,但更改UI时设置不会更改。
因此我的问题是......如何配置针对用户设置的双向绑定?
我可以编写事件处理程序来手动执行所有操作,但我认为这无法使用绑定。
答案 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事件并将新的数据绑定值推送到基础数据源。我已经为许多控件做了这件事,并且像魅力一样。