2013-01-18 93 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

相關問題