C# 命令仅在创建时调用,但在单击按钮后不调用

C# 命令仅在创建时调用,但在单击按钮后不调用,c#,wpf,C#,Wpf,我有一个带有ICommand SaveCommand的窗口,用于保存输入数据。问题是该命令只在创建时调用,而不是在单击按钮后调用 在ViewModel中: public ICommand SaveCommand { get { return new SaveCommand(DataManager.Type.House, model); } } 命令: class SaveCommand : ICommand

我有一个带有
ICommand SaveCommand
的窗口,用于保存输入数据。问题是该命令只在创建时调用,而不是在单击按钮后调用

在ViewModel中:

public ICommand SaveCommand
    {
        get
        {
            return new SaveCommand(DataManager.Type.House, model);
        }
    }
命令:

class SaveCommand : ICommand
    {
        IModel model;
        DataManager.Type type;
        public SaveCommand(DataManager.Type type, IModel model)
        {
            this.type = type;
            this.model = model;
        }
        public event EventHandler CanExecuteChanged;
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            switch (type)
            {
                case DataManager.Type.Book:
                    DataManager.AddBook((Book)model);
                    break;
                case DataManager.Type.Author:
                    DataManager.AddAuthor((Author)model);
                    break;
                case DataManager.Type.House:
                    DataManager.AddHouse((House)model);
                    break;
            }
        }
    }
在XAML中:

<Button x:Name="saveButton" 
                Command="{Binding Path=SaveCommand}" Content="_Save"
                IsEnabled="{Binding Path=AllPropertiesValid}" Click="SaveButton_Click"/>

我试图重现这个问题,但在这里效果很好,我删除了
SaveCommand构造函数
,因为我没有
IModel
DataManager
“此命令仅在创建时调用”您的意思是在绑定期间调用构造函数?我以为
命令
s应该替换
单击
事件?尝试删除事件句柄我发现了问题,这是我的愚蠢错误,对不起,我有一些代码从
SaveCommand
属性中的字典中获取数据,键为
null
,我只有在查看输出时才发现这个问题。现在我知道这种风格的错误我只能在输出中而不是在运行时错误窗口消息中找到。我试图重现这个问题,但在这里效果很好,我删除了
SaveCommand构造函数
,因为我没有
IModel
DataManager
,因为“这个命令只在创建时调用”你的意思是在绑定期间调用构造函数?我以为
命令
s应该替换
单击
事件?尝试删除事件句柄我发现了问题,这是我的愚蠢错误,对不起,我有一些代码从
SaveCommand
属性中的字典中获取数据,键为
null
,我只有在查看输出时才发现这个问题。现在我知道这种样式的错误只能在输出中找到,而不能在运行时错误窗口消息中找到。
public partial class AddHouse : Window
    {
        public AddHouse()
        {
            InitializeComponent();
            DataContext = new HouseViewModel();
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            App.Current.MainWindow.Show();
            base.OnClosing(e);
        }

        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            Close();
        }
    }