MVVMとサンプル アプリケーションに関する Josh Smith の MSDN 記事についてです。このトピックについてSOに多くの質問があることを知っており、それらすべてを調査しました。それらのほとんどは MVVM に焦点を当てていますが、私の問題は、MVVM よりも XAML に関連していると思います。
サンプル アプリケーションには、ワークスペース領域用の次の XAML が含まれています。
<Border Grid.Column="2" Style="{StaticResource MainBorderStyle}">
<ContentControl Content="{Binding Path=Workspaces}" ContentTemplate="{StaticResource ResourceKey=WorkspacesTemplate}"/>
</Border>
関連するリソースは次のとおりです -
//Explains how to render the 'Workspace' content area in the main window
<DataTemplate x:Key="WorkspacesTemplate">
<TabControl Margin="4" ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
ItemTemplate="{StaticResource ResourceKey=ClosableTabItemTemplate}"/>
</DataTemplate>
//Explains how to render a tab item with a close button
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel Width="120">
<Button Command="{Binding Path=CloseCommand}" Content="X" Cursor="Hand"
DockPanel.Dock="Right" Focusable="False" FontFamily="Courier"
FontSize="9" FontWeight="Bold" Margin="0,1,0,0" Padding="0"
VerticalContentAlignment="Bottom" Width="16" Height="16"/>
<ContentPresenter Content="{Binding Path=DisplayName}" VerticalAlignment="Center"/>
</DockPanel>
</DataTemplate>
私がまだ理解していないこと -
- 構文
ItemsSource="{Binding}"
は、DataContext のプロパティではなく、ItemsSource を TabControl の DataContext に直接バインドする必要があります。しかし、TabControl の DataContext はどこに設定されているのでしょうか? Content="{Binding Path=Workspaces}"
TabControl の ItemsSource とワークスペース (WorkspaceViewModel の ObservableCollection) の間のバインディングをどのように正確に作成していますか?- 記事には、 データ バインディングに依存することで、
Content
a のプロパティがTabItem
ViewModelBase から派生したオブジェクトを受け取り、 を表示すると書かれています。どのように ?!?わかりました、 data bindingを通して。しかし、それは私にとって抽象化するには多すぎます。
一般にthe way binding is flowing/working through these two resources behind the scene
、TabItems にビューをロードすることができません。私にとっては、何が何にバインドされているかのようなものです。
この伝説的な記事とサンプル アプリケーションは、WPF/MVVM の初心者にとって非常に役立つものです。しかし、それはあまり詳細ではありません。私自身、これでMVVMの使い方を学びました。私のような人はいるし、これからもいると思います。それで、バインディングシーケンスをもう少し詳しく説明してもらえますか?
関連ノート:
この文脈で私がすでに知っていることのヒントをあなたに与え、あなたが答えるのを助けるかもしれません. 私は初心者レベルの WPF アプリケーション開発者です。私のXAMLに関する知識 はあまりよくありません-
DataTemplate
ViewModel タイプが発生したときに View を表示し、ViewModel をその View の DataContext として設定するというtyped- による魔法を認識しています。- 私の理解では、Content はContentControl に何を表示するかを示し、ContentTemplate はそのコンテンツを表示する方法を示します。
- 私は基本的なデータ バインディングの概念以上のものを持っており、いくつかの WPF/MVVM プロジェクトに携わってきました。