正在创建通用DependencyProperty
本文关键字:DependencyProperty 创建 | 更新日期: 2023-09-27 18:26:33
我有一个泛型类,它采用模板T
,它应该是一个不可为null的对象:
class Point<T> where T : struct
{
public T x;
public T y;
}
由于我不想在这里讨论的原因,我真的需要T
是struct
,而不是任何对象或类。
我想创建一个UserControl,它有一个DependencyProperty
类的实例,例如:
public class MyUserControl : UserControl
{
static MyUserControl () {}
public static readonly DependencyProperty PointDependencyProperty =
DependencyProperty.Register(
"MyPoint",
typeof(Point<???>), // This is the problem!
typeof(MyUserControl));
public Point<object> MyPoint
{
get { return (Point<???>) GetValue(PointDependencyProperty ); }
set { SetValue(PointDependencyProperty, value); }
}
}
从上面的代码中可以看出,我不知道如何注册此属性。能做到吗?我尝试了object
,但这是可以为null的,所以编译器告诉我:
The type 'object' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'MyNamespace.Point<T>'
由于不同的原因,使MyUserControl
通用化将成为一个问题,所以我也不想走这条路。有办法做到这一点吗?
这个应该为您完成。当你因为强类型而不能做某事时,考虑包含你不能做的事情,在这个例子中,MYPOINT包含可变类型的对象,DP不在乎。
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
var mp = new MyPoint();
var mv = new MyType<string>("Now is the time");
mp.MyType = mv;
MyPoint = mp;
}
public static readonly DependencyProperty PointDependencyProperty =
DependencyProperty.Register(
"MyPoint",
typeof(MyPoint), // This is the problem!
typeof(MyUserControl));
public MyPoint MyPoint
{
get { return (MyPoint)GetValue(PointDependencyProperty); }
set { SetValue(PointDependencyProperty, value); }
}
}
public class MyPoint
{
public dynamic MyType { get; set; }
}
public class MyType<T>
{
public dynamic Myvalue { get; set; }
public Point MyPoint { get; set; }
public MyType(T value)
{
Myvalue = value;
}
}
这是因为您将T
定义为struct
或其派生对象。
如果用struct
替换Point<object>
,就像Point<DateTime>
一样,它是有效的:
public Point<DateTime> MyPoint
{
get { return (Point<DateTime>) GetValue(PointDependencyProperty ); }
set { SetValue(PointDependencyProperty, value); }
}
我想知道,你真的需要T
成为struct
吗?你不能把Point<T>
定义为:吗
class Point<T>
{
}
这意味着T
可以是任何东西,并且您可以按照习惯的方式访问它,而不存在仅使用object
或dynamic
的缺点。