サブクラス化クラスによって型が定義されるジェネリック依存プロパティを定義する抽象ジェネリック クラスがあります。このプロパティはどういうわけか依存関係プロパティとして認識されないため、実行時にこのプロパティにバインドするとエラー メッセージが表示されます。さらに、コンパイル時にコンストラクターを呼び出すことはできませんInitializeComponent
。何故ですか?
汎用抽象クラスMyClass
:
abstract public class MyClass<T,U> : UserControl {
protected MyClass() {
InitializeComponent(); // Here is one error: Cannot be found
}
abstract protected U ListSource;
private static void DPChanged
(DependencyObject d, DependencyPropertyChangedEventArgs e) {
var myClassObj = (MyClass) d;
myClassObj.DataContext = myClassObj.ListSource;
}
// Causes a binding error at runtime => DP (of the concrete subclass)
// is not recognized as a dependency property
public static readonly DependencyProperty DPProperty =
DependencyProperty.Register(
"DP",
typeof(T),
typeof(MyClass),
new PropertyMetadata(null, DPChanged));
public T DP {
get { return (T) GetValue(DPProperty); }
set { SetValue(DPProperty, value); }
}
}
対応する XAML:
<UserControl x:Class="Path.of.Namespace.MyClass"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ListView>
<!-- Some stuff for the list view - used for all subclasses -->
</ListView>
</UserControl>
具体的なサブクラスMySubClass
:
public partial class MySubClass : MyClass<ClassWithAList, List<int>> {
public MySubClass() {
InitializeComponent(); // Another error: Cannot be found
}
protected List<int> ListSource {
get { return new List<int>(); } // Just a dummy value
}
}
対応する XAML:
<local:MySubClass xmlns:local="Path.of.Namespace.MySubClass" />
PS私はまた、partial
物事が正しく行われたかどうかもよくわかりません.R#はこれらのキーワードを削除することを提案しています.