为了尽可能使 WPF 用户控制尽可能通用, 我烦恼了使 WPF 用户控制尽可能通用。 我定义了一个所有用户控制都可以从中产生的基级。 我希望能够通过为用户控制指定 Type 参数或甚至基准级来使其通用, 但这似乎是不可能的 。
作为围绕我的工作,我试图将类型设定为参数,例如:
public class UCBase : UserControl
{
public virtual Type UCType { get; private set; }
public virtual Type PanelType { get; private set; }
internal void SetType<TVM, TPanel>() where TPanel : new()
{
UCType = typeof(TVM);
PanelType = typeof(TPanel);
}
}
稍后,我需要创建一个实例,一个 UCType
所代表的类, 特别是另一个知道如何处理 ViewModel Im 的用户控制。
public ZonesAccordionPanel(List<ViewModelBase> vmItems)
{
InitializeComponent();
foreach (var item in vmItems)
{
var exp = new Expander { Header = new ZoneReport(item) };
exp.Resources.Add("item", item);
exp.Expanded += exp_Expanded;
accordion.Children.Add(exp);
}
}
void exp_Expanded(object sender, RoutedEventArgs e)
{
var expander = (Expander) sender;
var currentItem = expander.Resources["item"];
// I have my data and I d like to pass that to a specific UserControl
// that knows how to deal with that data the way I want
}
我如何才能根据我以 SetType<TVM, TPanel> ()
设定的类型参数进行用户控制?
我能否创建一个例子, 将这种类型储存在 公共虚拟类型面板Type { get; public set; /code> 中?
如果是的话,如何做到呢?