2010-10-23 83 views
5

我有一個屬性public MyClass MyProperty{...}的控件,其值在屏幕上顯示爲圖形。我想這個屬性通過使用Binding類是綁定到程序中的任何其他MyClassMyProperty將是thisBinding構造函數中的參數propertyName,其他MyClass將是dataMember參數)。WinForms上的單向綁定?

MyClass implements INotifyPropertyChanged所以在那邊一切都很好。但是,如果我沒有在MyProperty中實現get訪問器並嘗試綁定某些內容,我會得到一個「無法綁定到目標控件上的屬性'MyProperty' 參數名稱:PropertyName」錯誤。

這是否意味着我實施get訪問,即使我知道我永遠不會需要閱讀它的價值,我想一個單向(源到目標)結合,即使我只是在get返回null訪問器?

我猜Binding類使用它來比較新的值與舊的值或做一些其他的內部的東西。那麼,如果返回null是一個好主意,或者最好總是保留最後一個對象與set訪問器分配的副本並將其返回到get訪問器中。也許我真的不需要寫一個get訪問器,而我正在做其他的錯誤。只是在我註釋掉get訪問者時纔會出現錯誤,並在我放回時停止訪問。

編輯:如果有任何困惑:當我說MyProperty的價值在屏幕的曲線圖上顯示我不是指它在屏幕上的數值,其他一些代碼的讀取和顯示。沒有人從MyProperty中讀取任何值。 MyPropertyset訪問器是在屏幕上繪製東西的那個,這就是循環的結束。

+1

請重新格式化以使用段落。 – 2010-10-23 05:27:10

+0

還有一個OneWayToSource綁定。很難判斷它是否能夠解決您的問題,因爲我無法完整閱讀它:)給出一些簡短的示例代碼片段。 – 2010-10-23 05:28:14

+0

其實我想過段落,但不知道把它們放在哪裏。我會把它們放在周圍的某個地方:)。 – Juan 2010-10-23 05:32:25

回答

6

我不是100%肯定,我明白你的意思,但是我覺得您遇到的異常從Binding類的CheckBinding功能(reflectored)莖:

if (descriptor.IsReadOnly && (this.controlUpdateMode != ControlUpdateMode.Never)) 
{ 
    throw new ArgumentException(SR.GetString("ListBindingBindPropertyReadOnly", new object[] { this.propertyName }), "PropertyName"); 
} 

因此,改變綁定的ControlUpdateModeControlUpdateMode.Never可能是您要找的內容

+0

哦......這很有道理。 – Juan 2010-10-25 03:14:58