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

HoN*_*uRu 5 c# winforms

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

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

在我的情况下,"panelModified"是一个面板,其中包含一些按钮和嵌入的视频.

这是代码:

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

panel1.Controls.Add(panelPreview);

panel2.Controls.Add(panelPreview);
Run Code Online (Sandbox Code Playgroud)

它只显示在panel2 :(

vel*_*koz 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");
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后在你的绑定位置绑定它。在这里,我绑定到文本框,但你可以用任何东西来做到这一点:

CustomClass c = new CustomClass();
textBox1.DataBindings.Add("Text", c, "Prop", true, DataSourceUpdateMode.OnPropertyChanged);
textBox2.DataBindings.Add("Text", c, "Prop", true, DataSourceUpdateMode.OnPropertyChanged);
Run Code Online (Sandbox Code Playgroud)