2

ユーザーがMVVMとEFを使用してデータベースに詳細を入力できるアプリケーションを作成しています。ユーザーが一連の詳細をデータベースに入力できるようにするユーザー コントロールがあります。

このアプリケーション内には、view-modelプロパティ、コマンド、および CRUD 操作が含まれています。

私が達成したいのは、このアプリケーションを使用しているユーザーが詳細を入力できるようにすることですが、行がデータベースに入力されたら、command完全に無効にするか、1 行が追加されたことを示す例外をスローします。

ユーザーが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();
    }

xaml;

     <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

countEF を使用してメソッドを作成し、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 に答える