C# 网格多态的调用刷新事件#
我在WPF中有一个主窗口,它包含:C# 网格多态的调用刷新事件#,c#,wpf,polymorphism,C#,Wpf,Polymorphism,我在WPF中有一个主窗口,它包含: 具有不同选项卡的选项卡控件。每个选项卡中都有一个不同的控件,并包含一个数据网格 一个框架控件-它也有不同的控件分别用于数据输入 刷新按钮(尚未实现) 我已经成功地实现了用于数据输入的选项卡控件和框架,但问题是在切换选项卡之前无法刷新选项卡控件。我想在主窗口上有一个中央刷新按钮(我前面提到的那个)。 谁能指导我怎么做 由于tab的当前对象类型将仅在运行时确定,因此它是多态性吗?您可以为所有用户控件使用一个界面: public interface IRefresh
由于tab的当前对象类型将仅在运行时确定,因此它是多态性吗?您可以为所有用户控件使用一个界面:
public interface IRefreshAble
{
void Refresh();
}
public interface ICanDeleteItem
{
void Delete(/*parameters omitted*/);
bool CanDelete { get; }
}
public interface IHoldATypedItem ///sorry for bad name
{
Type TheType { get; }
}
public class TheUserControl : UserControl, IRefreshAble, ICanDeleteItem, IHoldATypedItem
{
public void Refresh()
{
//Your refreshcode
}
public bool CanDelete {get { /*code that indicates if an item can be deleted*/ } }
public void Delete(/*parameters ommited*/)
{
if(CanDelete)
{
//Delete Item
}
}
public Type TheType { get { return typeOf(Employee); } }
// otherstuff
}
然后通过usercontrols实现此接口:
public interface IRefreshAble
{
void Refresh();
}
public interface ICanDeleteItem
{
void Delete(/*parameters omitted*/);
bool CanDelete { get; }
}
public interface IHoldATypedItem ///sorry for bad name
{
Type TheType { get; }
}
public class TheUserControl : UserControl, IRefreshAble, ICanDeleteItem, IHoldATypedItem
{
public void Refresh()
{
//Your refreshcode
}
public bool CanDelete {get { /*code that indicates if an item can be deleted*/ } }
public void Delete(/*parameters ommited*/)
{
if(CanDelete)
{
//Delete Item
}
}
public Type TheType { get { return typeOf(Employee); } }
// otherstuff
}
现在,您可以将所有用户控件(例如)放在一个列表中,并执行以下操作:
foreach(IRefreshAble item in theList)
{
item.Refresh();
}
如果所有用户控件都有不止一个通用的Refresh()方法,那么只需扩展此成员的接口,就可以获得所需的多态性。非常好的方法。但是,如果我们必须只为某个控件执行功能,该怎么办呢。像Update()或Delete()方法吗?您可以在UserControl上拥有所需的任意多个接口。。。也许是一个界面,一个项目。你可以检查一个控件是否实现了一个带有“control is ICanDeleteAnItem”的接口,就像你可以查找基类一样。我会使用commandbindings,并在CanExecute eventhandler中使用此检查。如果我不能正确地传达它,请原谅。我有几个控件(UserControl),它们都需要Update()、Delete()和Update()方法。虽然我们可以在整个列表中使用Update(),但Delete()和Update()需要以多态方式知道调用方对象的类型(如果错误,请更正我),以便由精确的UserControl调用。如果需要,还可以使用type属性创建一个接口。。。或者扩展具有该属性的接口