2013-01-18 65 views
2

我正在创建一个应用程序,允许用户使用MVVM和EF在其数据库中输入详细信息。我有一个用户控件,它允许用户在数据库中输入一组详细信息。验证命令只允许在数据库中输入1行

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

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

我有一个tab control为用户输入他们的细节,然后数据网格为他们直观地看到细节被添加。

这可能实现吗?这将如何完成?迭代遍历行然后找到那一行?

这是我的代码片断,我的相关;

View-Model;

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。

回答

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."); 
     } 
    } 

希望这有助于!

+0

完美的作品,我没有意识到这很简单 - 非常感谢你! – WPFNoob

1

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

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

+0

@Christian感谢您的回复。我做了类似的事情,但我想知道并希望能够实现我在​​问题^^中提出的问题。 – WPFNoob

+0

您还希望选择网格中的数据,或者只是禁用该命令? –

+0

主要禁用该命令,因为用户仍然希望能够更新Datagrid中的数据。 – WPFNoob

相关问题