我想让 WPF UserControl 尽可能通用。我已经定义了一个所有用户控件都可以从中获取的基类。我希望能够通过为 UserControl 甚至基类指定类型参数来使其通用,但这似乎是不可能的。
作为一种解决方法,我正在尝试将 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 的用户控件。
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>()
?
我是否可以创建一个类型存储在其中的类的实例public virtual Type PanelType { get; private set; }
?
如果是这样,怎么做?