Wpf 验证命令以仅允许在数据库中输入1行

Wpf 验证命令以仅允许在数据库中输入1行,wpf,entity-framework,mvvm,command,Wpf,Entity Framework,Mvvm,Command,我正在创建一个应用程序,允许用户使用MVVM和EF将其详细信息输入数据库。我有一个用户控件,允许用户在数据库中输入一组详细信息 在此应用程序中,视图模型包含属性、命令和CRUD操作 我想要实现的是允许使用此应用程序的用户输入他们的详细信息,但一旦将一行输入到数据库中,就完全禁用命令,或者抛出一个异常,说明添加了一行 我有一个选项卡控件,用户可以输入他们的详细信息,然后使用数据网格直观地查看添加的详细信息 这有可能实现吗?如何做到这一点?遍历这些行,然后找到该行 以下是我的代码片段,与我的相关 视

我正在创建一个应用程序,允许用户使用MVVM和EF将其详细信息输入数据库。我有一个用户控件,允许用户在数据库中输入一组详细信息

在此应用程序中,
视图模型
包含属性、命令和CRUD操作

我想要实现的是允许使用此应用程序的用户输入他们的详细信息,但一旦将一行输入到数据库中,就完全禁用
命令
,或者抛出一个异常,说明添加了一行

我有一个
选项卡控件
,用户可以输入他们的详细信息,然后使用数据网格直观地查看添加的详细信息

这有可能实现吗?如何做到这一点?遍历这些行,然后找到该行

以下是我的代码片段,与我的相关

视图模型

    private ICommand _AddCommand;
    public ICommand AddCommand
    {
        get
        {
            if (this._AddCommand == null)
            {
                this._AddCommand = new RelayCommand(this.SaveExecute, this.SaveCanExecute);
            }

            return this._AddCommand;
        }
    }

    private bool SaveCanExecute()
    {
            return !string.IsNullOrEmpty(Name);
    }

    private void SaveExecute()
    {
        InsertDetail();
    }
xaml



由于我对WPF和MVVM不熟悉,因此非常感谢您的帮助或指导。

最简单的方法是在逻辑进入SaveExecute()方法后禁用该按钮。这将阻止发出新命令


之后,您可以启用或禁用它。

您可以使用EF创建一个
count
方法,然后在
SaveExecute()
命令方法中,调用
count
,类似这样

public int Count(int _ID)
{
    DBEntities context = new DBEntities();

        return (from o in context.Entities
                where o.EntityID == _ID
                select o.EntityID).Count();
}
然后,在你的命令方法中

    private void SaveExecute() //RelayCommand
    {
        if (Count(1) == 0)
        {
            InsertDetails(this); //Insert method using EF
            MessageBox.Show("Items have been addded.");
        }
        else
        {
            MessageBox.Show("An Item already exists, unable to add another one.");
        }
    }

希望这有帮助

@Christian谢谢你的回复。我做过类似的事情,但我想知道并希望能够实现我在问题^^中提出的要求。您还想选择网格中的数据,或者只是禁用命令?主要是禁用命令,因为用户仍然希望能够更新数据网格中的数据。这非常有效,我不知道这有多简单——非常感谢!
    private void SaveExecute() //RelayCommand
    {
        if (Count(1) == 0)
        {
            InsertDetails(this); //Insert method using EF
            MessageBox.Show("Items have been addded.");
        }
        else
        {
            MessageBox.Show("An Item already exists, unable to add another one.");
        }
    }