调用网格多变形C#的刷新事件

时间:2015-02-13 07:13:01

标签: c# wpf polymorphism

我在WPF中有一个主窗口,它包含:

  1. 具有不同标签的标签控件。每个选项卡中都有一个不同的控件,并包含一个数据网格。
  2. 帧控制 - 它还分别具有不同的数据输入控件。
  3. 刷新按钮(尚未实施)
  4. 我已经成功实现了数据输入的选项卡控件和框架,但问题是我切换选项卡控件直到切换选项卡。我想在主窗口上有一个中央刷新按钮(我前面提到过)。 任何人都可以指导我如何做到这一点?

    因为tab的当前对象类型只在运行时决定,所以它是多态吗?

1 个答案:

答案 0 :(得分:3)

您可以为所有用户控件使用接口:

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; }
}

然后由usercontrols实现此接口:

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
}

现在,您可以将所有UserControl(例如)放入List< IRefreshAble>并做类似的事情:

foreach(IRefreshAble item in theList)
{
    item.Refresh();
}

如果你有超过所有UserControl常见的Refresh()方法,你可以扩展这个成员的接口并获得你需要的多态性。