我想知道如何在多个面板中使用自定义对象.
我创建了一个panelModified对象(从Panel扩展)并希望将它放在两个普通面板中,因此当对象更改其状态时,两个面板都会显示更新的信息.
在我的情况下,"panelModified"是一个面板,其中包含一些按钮和嵌入的视频.
这是代码:
panelPreview = new PanelPreview(file); (panelModified object)
panel1.Controls.Add(panelPreview);
panel2.Controls.Add(panelPreview);
Run Code Online (Sandbox Code Playgroud)
它只显示在panel2 :(
您显示的自定义对象必须能够通知其值正在更改(即实现 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)