0

Devexpress と Ado.net 接続モードを使用してデータベースを使用して WPF アプリケーションを作成しました。他の言語で作業し、C# に移行しました。WPF は初めてです。次のコードを記述して、単一行とグループ化された行を編集します。

void EditRow(int focRowHand, nrcsaEntities a)
        {

        Name nametext = grid.GetRow(focRowHand) as Name;      
        try
            {
            if (nametext.Name1 != string.Empty)
                {

                update_id = nametext.PK_ID;
                txtName2.Text = update_text = nametext.Name1;

                if (Panel3.Visibility == System.Windows.Visibility.Visible)
                    {
                    Panel1.Visibility = System.Windows.Visibility.Visible;
                    Panel3.Visibility = System.Windows.Visibility.Collapsed;
                    }

                else
                    {
                    Panel1.Visibility = System.Windows.Visibility.Collapsed;
                    Panel3.Visibility = System.Windows.Visibility.Visible;
                    }
                }
            }
        catch (Exception err)
            {
            DXMessageBox.Show(err.StackTrace);

            }

        }

    private void ToggleButton1_Copy_Click(object sender, RoutedEventArgs e)
        {

        if (view.FocusedRowHandle == -1)
            {
            DXMessageBox.Show("Please Select any Item From Grid List");
            }
        else
            {
            try
                {
                int FocRowHand = view.FocusedRowHandle;
                nrcsaEntities a = new nrcsaEntities();

                if (grid.IsGroupRowHandle(FocRowHand))
                    {
                    int childCount = grid.GetChildRowCount(FocRowHand);
                    for (int i = 0; i < childCount; i++)
                        {
                        int childHandle = grid.GetChildRowHandle(FocRowHand, i);
                        EditRow(childHandle, a);
                        }
                    }
                else
                    {
                    EditRow(FocRowHand, a);

                    }

                }
            catch (Exception ee)
                {
                DXMessageBox.Show(ee.StackTrace);
                }
            }

私のクライアントは、高品質のコードを生成することを要求しています。1000 人を超えるユーザーがこのアプリケーションを使用し、5000 人を超えるユーザー データを保存できる可能性があります。私の質問は次のとおりです。このコードをMVVMに変換したい場合、変換するのは少し複雑なので、これを行う方法。次に、このコードの品質についてどう思いますか。私はこれについて非常に混乱しています。お返事を楽しみにしています。

4

2 に答える 2

4

私が言えることは、このアプリケーションを特に WPF と MVVM に変換する場合、大量のコードを書き直す必要があるということだけです。問題の 1 つは、WPF が他の言語と大きく異なることです。ほとんどの開発者は、これらの違いのために、最初に WPF を学習するときに困難な苦労に直面します。

次に、MVVM デザイン パターンを使用する場合、状況はさらに異なります。たとえば、コード ビハインド ファイルにコードを記述することは一般的に嫌われます。もちろん、分離コード ファイルを使用することAttached Properties可能ですが、代わりにこれらの UI コントロール イベント ハンドラーの機能を「ラップ」するように実装する傾向がありますSelectionChanged

通常、表示されたコードはビュー モデルに移動する必要がありますが、その後、コントロールを参照する機能が失われるため、同じ動作を再実装する他の方法を見つける必要がありますが、 MVVM の方法で。また、多くのハンドラーなどICommandを置き換えるために、インスタンスのロードを実装する必要があります。Click

さて、これまでの私のコメントから、プロジェクトを変換することをお勧めしていないと思われるかもしれません。ただし、プロジェクトを変換することはお勧めしません。WPF と MVVM パターンの使用には大きな利点があります... グラフィック、アニメーション、スタイル、およびコントロールを他のもののように見せる機能などです。

最後のポイントは、「ビッグデータ」に関するあなたの質問に関連しています。WPFプロセッサを大量に消費するフレームワークです...これを回避する方法はありません。数万のデータ項目をきれいな UI 要素にレンダリングする場合、処理が遅くなる可能性があります。しかし、数年間大規模なアプリケーションに取り組んだ後、状況を改善する方法があることがわかりました。

WPF に、インストールされているグラフィックス カードの機能を使用させたり、表示されている項目のデータのみをロードする仮想化パネルを使用させたりすることができます。変換を開始する前に、WPF のこのマイナス面を実際に聞く必要があります。変換されてからでは手遅れになるからです。また、アプリケーションを実行するコンピューターを何らかの方法で十分に強力にすることもお勧めします。

この「要約」があなたにとってネガティブなものではなく、何らかの形で役立つことを願っています. 最後に、私は個人的にWPF と MVVM の両方の大ファンです。

于 2013-08-30T15:52:07.193 に答える
1

クライアントからさらに数日かけて、Devexpress MVVM Scaffolding Wizardを使用する準備ができていることをお勧めします。データベースに接続し、アプリケーションのインターフェースを変更するだけです。

于 2013-08-30T16:04:26.573 に答える