2011-05-04 38 views
2

我有叫SelectedAccessGroups一個綱領性的一種財產形式:如何在.NET中綁定到編程屬性?

[Bindable(true)] 
public string SelectedAccessGroups 
{ 
    get { return "Selected Access Groups here"; } 
} 

我也有一個BindingSource其中有一個名爲領域的EditableByAccessGroups形式。我想將我的SelectedAccessGroups屬性綁定到該字段。

我試圖在我的窗體的構造以下,但它不工作:

this.DataBindings.Add(new System.Windows.Forms.Binding("SelectedAccessGroups", 
    this.CriteriaBindingSource, "EditableByAccessGroups")); 

有沒有辦法做到這一點?

謝謝!

更新:我試圖運行我的程序時遇到的錯誤是相當不明確的,但進一步查看它時,發現我收到錯誤,因爲我的屬性是隻讀的。我爲該屬性添加了一個空白setter,現在綁定工作正常。

+0

你是什麼意思的「它不工作」?它是否顯示初始值,並且不顯示更改? – 2011-05-04 18:05:00

+0

@Chris我得到的錯誤是非常不具說服力的,但進一步調查後,我發現我得到的錯誤是因爲我的屬性是隻讀的。我添加了一個空白的二傳手,這是有效的。你知道我可以單向綁定嗎? – AndyGeek 2011-05-04 18:36:43

+0

看着你的編輯,我認爲正確的解決方案是設置綁定到OneWay,而不是創建空setter。這是令人極度困惑的,任何一個理智的程序員都會在你的腦海中b目結舌。 **編輯**:該死,那是winforms。不確定它是否具有單向綁定。 – Euphoric 2011-05-04 18:43:35

回答

1

根據您的更新和問題的變化,以獲得單向綁定,您可以使用使用其他具有約束力的構造函數需要DataSourceUpdateMode作爲參數之一。

http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.datasourceupdatemode.aspx

+0

正如我在Chris的評論中所說的,我希望數據源得到更新,但我不希望綁定設置我的屬性。有沒有辦法做一個綁定,以便數據源不會嘗試設置我的屬性? – AndyGeek 2011-05-05 15:31:35

0

而不是添加一個空白二傳手的克魯夫特,請嘗試使用the overloaded constructor of Binding that takes a DataSourceUpdateMode value和傳球DatasourceUpdateMode.Never。這將防止綁定嘗試從控件更新數據源。

+0

雖然這不是問題。我想用屬性值更新DataSource,但我不希望綁定嘗試設置屬性。 [此MSDN文章](http://msdn.microsoft.com/en-us/library/system.windows.forms.datasourceupdatemode.aspx)說,DataSourceUpdateMode「指定何時在綁定發生更改時更新數據源控制。」 – AndyGeek 2011-05-04 18:50:44

+0

如果你期望數據源被更新,你爲什麼會讓你的setter變成空白?我認爲你有數據源和控制混淆。我提到的設置阻止了控件通過綁定更新數據源,這是您嘗試使用空白設置器的「正確」方式。 – 2011-05-04 18:53:33

+0

@Chris我想要更新數據源,但我不希望綁定設置我的屬性。如果我做一個空白的setter,當數據源嘗試設置它時什麼都不會發生。 – AndyGeek 2011-05-05 14:30:57

相關問題