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