2012-03-26 81 views
2

我的屬性/ Settings.settings文件中有一個布爾值設置,它基本上存儲每個用戶「從右到左」或「從左到右」顯示模式。雙向綁定到用戶設置?

我有一個複選框,在我的功能區中綁定了值。然而,似乎綁定只是一種方式。有沒有什麼辦法可以使這兩種方式,而不必編寫代碼來堅持設置?

澄清

我已經成功地配置結合到設置在第一次加載時它的應用程序。問題在於這是一個單向綁定,即UI在設置更改時更新,但UI更改時設置不會更改。

因此,我的問題......我如何配置對用戶設置的雙向綁定?

我可以編寫事件處理程序來手動執行所有這些操作,但我認爲這違反了使用綁定的要點。

回答

1

這隻適用於我的機器上使用視覺工作室設計師,所以我會嘗試排除。

首先,我會設置複選框的常規形式,看看是否有幫助。你使用什麼組件/庫爲功能區?你在使用DevExpress嗎?我知道DevExpress沒有對Ribbon控件的數據綁定支持。您是否在使用其他組件或您自己的代碼?

其次,請注意,事件的順序並非如您所料。很可能首先觸發CheckedChanged事件,然後將值與設置同步。因此,而不是使用CheckedChanged事件,我會使用一個單獨的按鈕,獲取焦點並檢查該處理程序,如果該值是同步的。第三,您也可以重寫CheckedChanged事件並將新的數據綁定值推送到基礎數據源。我爲許多控件完成了這項工作,並且像魅力一樣工作。

+0

我去了CheckedChanged選項。謝謝。 – KingCronus 2012-03-26 16:24:39

+0

你說這在你的機器上工作?我在終極版本上測試了這一點,如果沒有我在答案中列出的更改,就無法使其工作。據我可以從文檔和其他問題閱讀,這是唯一的方法。所以,我很好奇你是如何做到這一點的,它是開箱即用的。 – 2012-03-26 17:53:08

+0

我不是「開箱即用」,我寫的CheckedChange事件處理程序基本上只是調用save方法。我放棄了原來的問題,因爲它讓我花更多時間來研究,而不是編寫解決方法。 Thankyou雖然你的幫助。 – KingCronus 2012-03-26 20:16:59

4

好吧,經過一番挖掘,看起來你需要稍微實現這一點,但它可能不像你想要的那樣乾淨。基本上,你的綁定對象必須實現INotifyPropertyChanged(這是不斷給我麻煩的部分...我認爲CheckBox必須實現這個接口,但它是複選框綁定的對象),其中Properties.Settings.Default。所以,你需要做的是以下

鉤到Property.Settings.Default的OnPropertyChanged事件:

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

然後,當任何綁定屬性的變化,只要調用保存方法:

void Default_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    Properties.Settings.Default.Save(); 
} 

基本上,當您綁定對象時,它確實會適當地更改Settings.Default.[Setting]。它只是不會在每個這些更改上調用Save。你必須實現這部分事情。

+0

我已經調用.Save(),但問題似乎是,當我更改綁定控件的狀態時,Properties對象未被更新。 – KingCronus 2012-03-26 13:55:59

+0

我想是這種情況...不要介意,只是意味着我的代碼隱藏與額外的事件處理程序。我澄清了我的原始問題,因爲有人提出任何想法!不管怎麼說,還是要謝謝你。 – KingCronus 2012-03-26 14:00:53

+0

@AdamKing其實,看看這篇文章:http://msdn.microsoft.com/en-us/library/0yyxh69h.aspx這似乎是你在找什麼?我會更新爲我的答案,如果這個工程我正在驗證...否則這篇文章似乎總結了你的選擇,否則:http://www.daniweb.com/software-development/csharp/threads/255512/binding-an-應用程序設置爲控制屬性 – 2012-03-26 14:05:24