0

私はまだ、WPF と MVVM パターンの学習曲線の急勾配の部分にいます。私のアプローチの一部は、「宇宙船で物事がどのように機能するかを理解する」ことです(いわば)。つまり、私の学習スタイルでは、内部を少し理解することが大いに役立ちます。

したがって、ViewModelをインスタンス化するコードで実行するアクションは、XAML で DataContext を宣言することのように見えます。誰かが私のためにこれを確認または修正できますか? つまり、この XAML コード スニペットでは、

<Window x:Class="MainRM21WPFapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mainVM="clr-namespace:MainRM21WPFapp.ViewModels"
    Title="RM21 Demonstration Application" Height="500" Width="700">
<Window.DataContext>
    <mainVM:MainWindowVM />
</Window.DataContext>
<Grid>
...
</Grid>

これです:

<Window.DataContext>
    <mainVM:MainWindowVM />
</Window.DataContext>

これにより、CLR がクラス MainWindowVM の新しいインスタンスを作成します。私はそれを正しく理解していますか?

4

1 に答える 1

2

それは正しいです。上記の XAML は、クラスのインスタンスをインスタンス化し、それをDataContextプロパティMainWindowVMに割り当てるように WPF に指示します。たとえば、パラメーターを受け取るコンストラクターを呼び出す必要がある場合は、それを作成してコード ビハインドの DataContext プロパティに手動で割り当てることもできますが、XAML ソリューションはあなたの場合と同様に効果的です。

DataContext プロパティを設定すると、データ バインディングを実行できます。たとえば、TextBlockコントロールがある場合、次のようにプロパティ X にバインドできます。

<TextBlock Text="{Binding Path=X}" />

ビュー モデル クラスがINotifyPropertyChangedインターフェイスを実装し、PropertyChangedイベントを発生させて、プロパティが変更されたときにビュー (ウィンドウ クラス) に通知し、データ バインディングを更新できるようにします。上記の例では、これにより、ビュー モデルでプロパティ X の値が変更されるたびに、WPF は TextBlock を自動的に更新することを認識します。

于 2012-09-27T00:04:27.430 に答える