MVVMの実際の意味は次のとおりです。UIはデータではありません。データはデータ、UIはUIです。
つまり、プログラムロジック(多くの場合ビジネスロジックと呼ばれる)がUIコンポーネントの状態に緊密に結合または依存するようにアプリケーションを開発するのではなく、データ項目(モデル)の状態に依存させる必要があります。 、またはビューモデル)。
たとえば、他のフレームワーク(winformsなど)では、テキストボックスとボタンを含む画面がある場合、通常、クリックイベントハンドラーをボタンに追加してから、テキストボックスからテキストを読み取ります。MVVMでは、TextBoxのTextプロパティをViewModelの文字列プロパティにバインドし、ボタンもViewModelのコマンドにバインドする必要があります。
これにより、UI(ViewModel)の抽象化が可能になるため、前に述べたように、アプリケーションロジックはUIではなくUIの抽象化に依存できます。
これにより、UIとロジックのスケーラビリティが大幅に向上し、UI動作の大部分がViewModelで定義されるため、UI動作のいくつかの側面のテストが可能になります。
MVVMには他の側面もありますが、主な認識はそれです。
編集:
答えを完全にするために、この具体的な例を追加します。
1-非MVVMWPF:
XAML:
<StackPanel>
<TextBox x:Name="txtLastName"/>
<Button Content="Click Me" Click="Button_Click"/>
</StackPanel>
背後にあるコード:
private void Button_Click(object sender, EventArgs e)
{
//Assuming this is the code behind the window that contains the above XAML.
var lastname = this.txtLastName.Text;
//Here you do some actions with the data obtained from the textbox
}
2-MVVM WPF:
XAML:
<StackPanel>
<StackPanel.DataContext>
<my:MyViewModel/>
</StackPanel.DataContext>
<TextBox Text="{Binding LastName}"/>
<Button Content="Click Me" Command="{Binding MyCommand}"/>
</StackPanel>
ViewModel:
public class MyViewModel
{
public string LastName { get; set; }
public Command MyCommand { get; set; }
public MyViewModel()
{
// The command receives an action on the constructor,
// which is the action to execute when the command is invoked.
MyCommand = new Command(ExecuteMyCommand);
}
private void ExecuteMyCommand()
{
//Only for illustration purposes, not really needed.
var lastname = this.LastName;
//Here you do some actions with the data obtained from the textbox
}
}
上記の例でわかるように、ViewModelにはビューへの参照がまったく含まれていません。したがって、ビューが所定の位置に保持されている限り、ビューは何でもかまいません{Bindings}
。
それらを魔法のように連携させる接着剤はDataContext
、すべてのバインディングが解決されるオブジェクトであるWPFUI要素のプロパティです。
双方向バインディングを有効にするためのViewModelのプロパティ変更通知など、他にもありますが、それはこの回答の範囲外です。
また、MVVMはデザインパターンであるのに対し、WPFはフレームワークであることにも注意してください。MVVMは現在、他のテクノロジーにも適用されています(現在、JavaScriptなどを使用したWeb用のMVVMについては多くの話題があります)
WPF固有の側面については、このチュートリアルだけでなく、他の回答で言及されている本を読むことをお勧めします。