在我的主窗口中(错误地指向MainWindow)我有一个方法可以在触发后获取值,这适用于我的用户控件,但出于某种原因,当我在MainWindow上尝试这个时,没有OnStudentIDChanged的定义。
public static readonly DependencyProperty StudentIDProperty = DependencyProperty.Register("StudentID", typeof(String), typeof(LoginWindow), new PropertyMetadata(OnStudentIDChanged));
public string StudentID
{
get { return (string)GetValue(StudentIDProperty); }
set { SetValue(StudentIDProperty, value); }
}
static void OnStudentIDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as LoginWindow).OnStudentIDChanged(e); // OnStudentIDChanged no definition?
}
答案 0 :(得分:1)
也许您打算将d
投放到MainWindow
而不是LoginWindow
?
static void OnStudentIDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as MainWindow).OnStudentIDChanged(e);
}
但这仍然是错误的,因为它是一个无限递归(从你以前的帖子猜测)......
答案 1 :(得分:0)
我在这里做了一些假设,但我猜测static void OnStudentIDChanged
位于MainWindow,对吗?
问题是您无法使用该类型的实例调用类型的静态方法。例如
public class MyClass
{
public static void SomeMethod();
}
var instance = new MyClass();
(instance as MyClass).SomeMethod() //THIS WILL NOT WORK
同样,这是假设我正确理解你的情景。
d 总是 LoginWindow 在以下行中?
(d as LoginWindow).OnStudentIDChanged(e);