【问题标题】:Validate a Command to only allow 1 Row to be entered in Database验证命令以仅允许在数据库中输入 1 行
【发布时间】:2013-01-02 04:35:53
【问题描述】:

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

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

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

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

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

这是我的相关代码 sn-ps;

视图模型;

    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;

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

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

【问题讨论】:

    标签: wpf entity-framework mvvm command


    【解决方案1】:

    您可以使用 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.");
            }
        }
    

    希望这会有所帮助!

    【讨论】:

    • 效果很好,我没想到这么简单 - 非常感谢!
    【解决方案2】:

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

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

    【讨论】:

    • @Christian 感谢您的回复。我做了类似的事情,但我想知道并希望有可能实现我在问题中提出的问题^^。
    • 您还想选择网格中的数据,或者只是禁用命令?
    • 主要禁用该命令,因为用户仍然希望能够更新 Datagrid 中的数据。
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2011-08-31
    • 2017-04-25
    • 1970-01-01
    • 2015-03-26
    • 2017-07-25
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多