2

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

在此应用程序中,view-model包含属性、命令和 CRUD 操作。

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

我有一个tab control供用户输入他们的详细信息,然后数据网格让他们直观地查看添加的详细信息。

这有可能实现吗?这将如何完成?遍历行然后找到该行?

这是我的相关代码片段;

视图模型;

    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();
    }

xml;

     <Button Content="Save" Grid.Row="9" Name="btnSave" VerticalAlignment="Top" Grid.Column="1" Width="75"
        Command="{Binding AddCommand}" />

感谢任何帮助或指导,因为我是 WPF 和 MVVM 的新手。

4

2 回答 2

1

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

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

于 2013-01-18T13:36:07.863 回答
1

您可以使用 EF 创建 aacount方法,然后在您的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.");
        }
    }

希望这可以帮助!

于 2013-01-28T08:49:15.220 回答