C# 如何在多个面板中显示对象?

C# 如何在多个面板中显示对象?,c#,winforms,C#,Winforms,我想知道如何在多个面板中使用自定义对象 我制作了一个panelModified对象(从Panel扩展),并希望将其放置在两个普通面板中,因此当对象更改其状态时,两个面板都会显示更新的信息 在我的例子中,“panelModified”是一个带有一些按钮和嵌入视频的面板 代码如下: panelPreview = new PanelPreview(file); (panelModified object) panel1.Controls.Add(panelPreview); panel2.Cont

我想知道如何在多个面板中使用自定义对象

我制作了一个panelModified对象(从Panel扩展),并希望将其放置在两个普通面板中,因此当对象更改其状态时,两个面板都会显示更新的信息

在我的例子中,“panelModified”是一个带有一些按钮和嵌入视频的面板

代码如下:

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

panel1.Controls.Add(panelPreview);

panel2.Controls.Add(panelPreview);

它仅在面板2中显示:(

不能将同一控件放在两个不同的位置

这里的解决方案是创建一个“模型”对象,其中包含所有可以更改的信息。然后创建指向同一模型的两个PanelPreview副本

您的模型应该实现INotifyPropertyChanged,这样它就可以告诉面板什么时候发生了变化


出于您的目的,“模型”与“业务对象”或“数据对象”是一样的。您正在显示的自定义对象必须能够通知其值正在更改(即实现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);