WPFUserControlをできるだけ汎用的にするのは面倒です。すべてのユーザーコントロールがinehritできる基本クラスを定義しました。UserControlまたは基本クラスのTypeParametersを指定して汎用化できるようにしたいのですが、これは不可能のようです。
回避策として、タイプをパラメーターとして設定しようとしています。例:
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; }
ですか?
もしそうなら、どのように?