0

アプリケーションをWindowsフォームからWPFに移行しているので、MVVMパターンを使用しようとしていますが、少し注意が必要です。

Windowsフォームには、ステップの実行や値の設定などを可能にするいくつかの新しいメソッドを定義したprogressBarを含むフォームがあります。このコードは、以下のようにprogressBarのコードビハインドに配置されます。

public class MyProgressBar : ProgressBar
{
    public MyProgressBar ()
    {
        InitializeComponent();
    }

    public void Method01()
    {...}

    public void Method02()
    {...}

    public void Method03()
    {...}
}

Method01、Method02、およびMethod03のコードはコンテナー形式で使用されるため、ここに私の質問があります。WPFでは、MVVMパターンを使用しているので、そのコードをどこに配置する必要がありますか?

今まで私はこのクラスを持っています:

私のモデル:

public class MyFormModel : DataTable
{
    public OutputResultsDataTable()
        : base()
    {
        Columns.Add(new DataColumn("Number"));
        Columns.Add(new DataColumn("Message"));
        Columns.Add(new DataColumn("Detail"));
    }
}

私のViewModel:

public class MyNewWPFForm
{
    /// <summary>
    /// 
    /// </summary>
    public MyFormModel MyData{ get; set; }

    /// <summary>
    /// Constructor
    /// </summary>
    public MyNewWPFForm()
    {
        if (System.Windows.Application.Current.MainWindow != null)
        {
            MyData= new MyFormModel ();                
        }
    }
}

WPFでは、MVVMについて読んでいても、新しいprogressBarコントロールとそのコンテナーフォームを既に作成していますが、Method0Xのコードをどこに配置する必要があるのか​​理解できません。これは、読んだ内容によると、そのコードをviewModelに配置しますが、別の問題があります。別のフォーム内にあるため、ビューモデルからプログレスバーにアクセスするにはどうすればよいですか?

誰かが私を助けてくれることを願っています。前もって感謝します。

4

1 に答える 1

2

コントロールのメソッドは、コントロールの状態を設定するために使用されているようです。これを行うには、依存関係プロパティを使用できます。

バインディングを使用して、ビューをビューモデルに接続します。

コントロールの進行状況のプロパティを作成します。

次に、Xamlでバインディングを追加します

<MyProgressBar Progress="{Binding CurrentProgress}" />

ビューのデータコンテキストを新しいビューモデルに設定します。CurrentProgressは、ビューモデルのプロパティです。ビューモデルにINotifyPropertyChangedを実装します。

コントロールに物を追加したり、コントロールから物を削除したりするには、ObservableCollectionを使用します。

于 2012-05-31T22:45:14.000 に答える