2010-09-08 65 views
4

我想知道如何在多個面板中使用自定義對象。如何在多個面板中顯示對象?

我做了一個panelModified對象(從面板擴展),並希望把它放在兩個正常面板中,所以當對象改變它的狀態時,兩個面板都顯示更新信息。

在我的情況下,「panelModified」是一個有一些按鈕和一個嵌入式視頻的面板。

這裏是代碼:

panelPreview = new PanelPreview(file); (panelModified object) 

panel1.Controls.Add(panelPreview); 

panel2.Controls.Add(panelPreview); 

它只顯示了是Panel2 :(

回答

1

您顯示的自定義對象必須能夠通知它的值正在更改(即實現INotifyPropertyChanged)。

然後,您可以更改您的PanelPreview以綁定您的對象。

這樣,您可以擁有儘可能多的實例 - 當您在一個實例中更改時,INotifyPropertyChanged將觸發所有其他實例的顯示。

例如:

public class CustomClass : INotifyPropertyChanged 
    { 
     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 

     private void OnPropertyChanged(string propName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
      } 
     } 

     private string mProp; 
     public string Prop 
     { 
      get 
      { 
       return mProp; 
      } 
      set 
      { 
       if (value != mProp) 
       { 
        mProp = value; 
        OnPropertyChanged("Prop"); 
       } 
      } 
     } 
    } 

,然後在綁定的地方,你給它綁定。這裏我綁定到文本框,但你可以用它來做:

CustomClass c = new CustomClass(); 
textBox1.DataBindings.Add("Text", c, "Prop", true, DataSourceUpdateMode.OnPropertyChanged); 
textBox2.DataBindings.Add("Text", c, "Prop", true, DataSourceUpdateMode.OnPropertyChanged); 
+0

非常感謝,我現在得走了,但我會稍後再試。 – HoNgOuRu 2010-09-11 00:55:02

3

你不能把在兩個不同的地方相同的控制

這裏的解決方案是創建一個包含所有可以更改的信息的「模型」對象,然後創建指向相同模型的PanelPreview的兩個副本

您的模型應該執行注意INotifyPropertyChanged,以便在事情發生變化時可以告訴面板。

出於您的目的,「模​​型」與「業務對象」或「數據對象」是相同的。

+0

好的,我會搜索更多的信息。 謝謝! – HoNgOuRu 2010-09-08 22:32:30