WPF按钮没有实例化

时间:2015-03-24 20:03:42

标签: c# wpf xaml button mvvm

我遇到了最棘手的问题而且让我疯狂。

我已经创建了一个WPF MVVM程序,一切正常,但是,现在当我打开程序并单击一个按钮时,我收到一个System.NullReferenceException。我在发生错误的地方设置了一个断点,并且没有实例化按钮,但是,表单显示正常并且按钮是可点击的。事实上,没有任何按钮实例化(我的表单上的每个按钮都给出了相同的错误,当我在InitializeComponent()之后设置断点时,没有任何按钮显示在此下 - 所有其他组件都显示出来。

以下是按钮的示例代码:

MainWindow.xaml

<Button Content="A" 
        Command="{Binding KeyButtonClickCommand}"
        Style="{StaticResource keyButtonStyle}" />

抛出错误的方法是在我的ViewModel中,该按钮绑定到命令:

private void keyButton_Click(object sender)
{
  Button btn = (Button)sender;
  string tempKey = "";
  tempKey = btn.Content.ToString();
  this.Key = tempKey;            
}

InitializeComponent()

之后的断点

Breakpoint after InitializeComponent

错误后的断点

Breakpoint at error location

就像我说的那样,早些时候工作得很好,现在只是继续使用fritz。

最让我担心的是,也许我做过一些我不应该做的事情,这可能会影响未来的项目。我只是想仔细检查一下,或者只是一个怪胎。

感谢。

1 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,你的keyButton_Click方法的参数为null。

这很可能是因为您没有将CommandParameter传递给您的命令。如果要将按钮本身传递给命令,请尝试以下XAML。

<Button Content="A" 
        Command="{Binding KeyButtonClickCommand}"
        CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
        Style="{StaticResource keyButtonStyle}" />

我确实想要注意MVVM的全部意义是不直接在ViewModel中与实际的UI层进行交互,当你将按钮传递给ViewModel时,你正是这样做的。

编辑如评论中所述,如果要将“A”作为参数传递给命令,则应将其设置为CommandParameter。

<Button Content="A" 
            Command="{Binding KeyButtonClickCommand}"
            CommandParameter="A"
            Style="{StaticResource keyButtonStyle}" />