C# 未初始化ICommand依赖项属性

C# 未初始化ICommand依赖项属性,c#,wpf,xaml,C#,Wpf,Xaml,我有一个名为LoginControl的用户控件,其中我定义了一个命令: //This is LoginControl public ICommand LoginCommand { get { return (ICommand)GetValue(LoginCommandProperty); } set { SetValue(LoginCommandProperty, value); } } public static readonly DependencyProperty Log

我有一个名为
LoginControl
的用户控件,其中我定义了一个
命令

//This is LoginControl
public ICommand LoginCommand
{
    get { return (ICommand)GetValue(LoginCommandProperty); }
    set { SetValue(LoginCommandProperty, value); }
}

public static readonly DependencyProperty LoginCommandProperty =
        DependencyProperty.Register("LoginCommand", 
                                    typeof(ICommand), 
                                    typeof(LoginControl));
<local:LoginControl Grid.Row="1" Margin="5" LoginCommand="{Binding MyCommand}"/>
我在
LoginControl
中有一个按钮,单击事件在其中调用此事件处理程序:

private void Login_Click(object sender, RoutedEventArgs e)
{
    LoginCommand.Execute(passwordBox.Password);
}
现在,我有了另一个名为
SettingsControl
的用户控件,其中包括
LoginControl

//This is LoginControl
public ICommand LoginCommand
{
    get { return (ICommand)GetValue(LoginCommandProperty); }
    set { SetValue(LoginCommandProperty, value); }
}

public static readonly DependencyProperty LoginCommandProperty =
        DependencyProperty.Register("LoginCommand", 
                                    typeof(ICommand), 
                                    typeof(LoginControl));
<local:LoginControl Grid.Row="1" Margin="5" LoginCommand="{Binding MyCommand}"/>

调用
Login\u Click
事件处理程序时,代码抛出NullReferenceException(
MyCommand
为null)。我不明白为什么。正如您在这里看到的那样,
MyCommand
已初始化。初始化
LoginControl
时,我将
MyCommand
传递给它。所以我不明白为什么它应该是空的。

经过两个小时的思考,我找到了解决方案。
将MyCommand初始化移到组件的上方(感谢您的建议) 在xaml中指定
设置控件的名称。然后更改
LoginCommand
绑定,如下所示:

{Binding MyCommand, ElementName=settingControl}

这起作用了。我猜之前的绑定是在寻找
LoginControl
本身的数据上下文。通过指定ElementName,wpf知道我需要什么DataContext(即
设置控件的DataContext)。

在初始化组件之前是否尝试初始化MyCommand?所有绑定都是在此方法中创建的。因为您的MyCommand属性没有通知控件它的值更改,所以您得到null。是的,我尝试在InitialiseComponent之前初始化它,但它仍然抛出NullReferenceException。您是否尝试过将MyCommand转换为完整属性并在设置它时引发OnPropertyChanged?我相信你得到了一个空引用异常,因为绑定没有意识到设置了MyCommand。是的,我已经做了一切。但是仍然有例外:/我找到了答案:)如果你知道我的答案为什么有效,请告诉我。谢谢,这非常有帮助。