我有以下MainWindow
布局左侧导航面板和右侧显示区域(两者都是UserControls
)。
有人可以解释如何将DataContext
导航面板 ( LinksView.xaml
)分配给LinksViewModel.cs
. 我想将 Command( BtnCompanyClickCommand
) 绑定到按钮并BtnCompanyClickCommand
在LinksViewModel.cs
.
我尝试了在 StackOVerflow 上找到的各种方法来设置 DataContext,但这些解决方案似乎都不起作用(绑定 RelativeSource、命名视图和绑定到名称等)。
主窗口.xaml
<StackPanel Orientation="Horizontal">
<vw:LinksView DataContext="{Binding RelativeSource={RelativeSource Self}}"/>
<ContentControl Content="{Binding CurrentUserControl}" />
</StackPanel>
链接视图.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 的 DataContext 的解释,这必须在 UserControl 的第一个子项上完成。
这是修改后的 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>
但是,我仍然不清楚为什么我必须设置子元素的 DataContext 而不是 UserControl,以及为什么 LinksView 的 DataTemplate(在 FormsDictionary.xaml 中设置)不与 LinksViewModel 的 DataContext 绑定。任何解释将不胜感激。