2016-02-02 73 views
0

我有一個包含一個屬性的通用自定義控件的通用屬性如下所示:的WinForms數據綁定在一個自定義的控制

public T Editing 
{ 
    get { return _editing; } 
    set 
    { 
     if (object.ReferenceEquals(value, _editing)) 
      return; 
     BeginInvoke(new MethodInvoker(() => UpdateOnGuiThread(value))); 
    } 
} 

我已經試過數據綁定這個屬性爲我的控制器對象上的屬性,如下圖所示:

_customCtrl.DataBindings.Add(new Binding("Editing", _controller, "CurrentItem")); 

控制器類實現INotifyPropertyChanged並暴露這樣的屬性:

public SpecialData CurrentItem 
{ 
    get { return _currentItem; } 
    set 
    { 
     _currentItem= value; 
     OnPropertyChanged("CurrentItem"); 
    } 
} 

但是,當我從我的控制器類中廣播PropertyChanged時,調試器將永遠不會輸入Editing屬性的setter。我也試過下面的數據綁定無濟於事。

_customCtrl.DataBindings.Add(new Binding("Editing", _controller, "CurrentItem", false, DataSourceUpdateMode.OnPropertyChanged)); 

我讀過https://msdn.microsoft.com/en-us/library/ms233813(v=vs.80).aspx和使用DefaultBindingPropertyAttribute嘗試,但它並沒有幫助。

有沒有人知道如何讓這個綁定工作?我認爲綁定管理器會將值從控制器傳播到控件的屬性,因爲PropertyChanged在控制器類中廣播(就像簡單的文本框文本綁定一樣)。

任何想法?

感謝, 肖恩

+0

什麼是'_customCtrl'的實際'T'並且是否存在從'SpecialData'到它的轉換? –

+0

它們是相同的類型。這是一個班級類型 –

回答

0

你應該總是與FormattingEnabled屬性設置爲true創建綁定。請注意,FormattingEnabled=false只是爲了向後兼容,不幸的是它是默認設置。

可以使用Binding構造函數(或ControlBindingsCollection.Add)中的一個具有formattingEnabled參數的重載或之後設置的屬性。在你的情況下,像這樣的東西

_customCtrl.DataBindings.Add("Editing", _controller, "CurrentItem", true);