MainWindow
左側のナビゲーション パネルと右側の表示領域をレイアウトする次のものがあります (これらは両方とも ですUserControls
)。
DataContext
ナビゲーション パネル ( LinksView.xaml
)の を の に割り当てる方法を誰か説明できますかLinksViewModel.cs
。BtnCompanyClickCommand
Command( ) をボタンにバインドし、 で定義BtnCompanyClickCommand
したいと思いますLinksViewModel.cs
。
DataContext を設定するために StackOVerflow で見つけたさまざまな方法を試しましたが、これらの解決策はどれも機能していないようです (RelativeSource のバインド、ビューの名前付け、名前へのバインドなど)。
MainWindow.xaml
<StackPanel Orientation="Horizontal">
<vw:LinksView DataContext="{Binding RelativeSource={RelativeSource Self}}"/>
<ContentControl Content="{Binding CurrentUserControl}" />
</StackPanel>
LinksView.xaml
<StackPanel Orientation="Vertical">
<Button Content="Company" Width="75" Margin="3" Command="{Binding ElementName=Links,Path=BtnCompanyClickCommand}" />
</StackPanel>
FormsDictionary.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:SidekickAdmin.ViewModel"
xmlns:vw="clr-namespace:SidekickAdmin.View">
<DataTemplate DataType="{x:Type vm:CompanySummaryViewModel}">
<vw:CompanySummaryView>
<ContentControl Content="{Binding }" />
</vw:CompanySummaryView>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:LinksViewModel}">
<vw:LinksView />
</DataTemplate>
</ResourceDictionary>
編集
そのため、UserControl の最初の子項目で行う必要がある UserControl の DataContext を設定する方法について、この説明にようやく出くわしました。
動作する変更された LinksView.xaml を次に示します。
<StackPanel Orientation="Vertical">
<StackPanel.DataContext>
<vm:LinksViewModel /> <!-- Bind the items in StackPanel to LinksViewModel -->
</StackPanel.DataContext>
<Button Content="Company" Width="75" Margin="3" Command="{Binding BtnCompanyClickCommand}" />
</StackPanel>
ただし、UserControl ではなく子要素の DataContext を設定する必要がある理由と、LinksView の DataTemplate (FormsDictionary.xaml で設定) が LinksViewModel の DataContext に結び付けられない理由については、まだ明確ではありません。説明をいただければ幸いです。