0

私はC#とWPFの両方が初めてです。簡単なプログラムを書きました。0 から始まるCounter読み取り専用プロパティと、単純にカウントを 1 ずつ増やす public メソッドを公開するというクラスがあります。実装します。CountIncrementCounterINotifyPropertyChanged

私は Window クラスを持っています (コードは以下にあります)。オブジェクトのインスタンスをコンストラクターに渡し、Counterバインディングを実行します。ウィンドウにはボタンとラベルがあります。ラベルはカウンターのCountプロパティにバインドされ、ボタンは を呼び出しますIncrement

これはすべて機能します。

ただし、ネットや MSDN で見たほとんどの例は、XAML でバインディングを定義することを主に扱っています。この例を変更して、バインド操作をコード ビハインドからマークアップに移動するにはどうすればよいですか? VS2010 の [プロパティ] ウィンドウの Binding プロパティは、私が望むことを行う方法を認識していないようです。おそらくそれは不可能ですか?

追加の質問: この例は MVVM には適合しないと思います... 私の Counter クラスは独立しており、そのプロパティ以外のどこにもビューに関連付けられていません。ただし、CounterWindow クラスはそれへの参照を保持しています。これは、この参照の適切な場所ですか? また、おそらくウィンドウを作成しCounterObjectてから、コンストラクターを介して渡す代わりに使用するプロパティ (例: ) を設定する必要があると思います。

public partial class CounterWindow : Window {
    Counter ctr;

    public CounterWindow(Counter ctr) {
        InitializeComponent();

        this.ctr = ctr;
        Binding b = new Binding("Count");
        b.Source = ctr;
        CounterLabel.SetBinding(Label.ContentProperty, b);
    }

    private void IncrementButton_Click(object sender, RoutedEventArgs e) {
        ctr.Increment();
    }
}
4

1 に答える 1

1

このようなもの:

public CounterWindow(Counter ctr) 
{
    InitializeComponent();
    DataContext = ctr;
}

マークアップ:

<Label Content="{Binding Count}" />  

UPD。MVVMには、ビューファーストとモデルファーストの2つの一般的なアプローチがあります。
最初にビューとは、最初にビューを作成し、次にビューがバインドされているビューモデルを作成することを意味します。
モデルファーストとは、最初にビューモデルを作成し、次にビューモデルがそのビューを作成し、ビューのデータコンテキストとして(コンストラクターまたはDataContextプロパティセッターを介して)それ自体を渡すことを意味します。

これがお役に立てば幸いです。

于 2012-05-23T17:44:17.220 に答える