왼쪽 탐색 패널과 오른쪽 표시 영역 (둘 다 UserControls
)을 배치하는 다음 MainWindow
이 있습니다.WPF : UserControl DataContext 설정
내비게이션 패널 DataContext
(LinksView.xaml
)을 LinksViewModel.cs
에 할당하는 방법을 설명 할 수 있습니까? 명령 (BtnCompanyClickCommand
)을 단추에 바인드하고 BtnCompanyClickCommand
을 LinksViewModel.cs
에 정의하고 싶습니다.
DataContext를 설정하기 위해 StackOverflow에서 찾은 다양한 방법을 시도했지만 이러한 솔루션 중 아무 것도 작동하지 않는 것 (바인딩 관계형 소스, 이름 지정 및 이름 바인딩 등).
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를 설정하는 방법이 explanation을 가로 질러왔다.
다음은 수정 된 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>
그러나, 나는 아직도 내가 (FormsDictionary.xaml에서 설정) LinksView에 대한 DataTemplate을이의 DataContext에 넥타이를하지 않는 이유는 자식 요소의 DataContext에 아닌 UserControl을하고 설정해야하는 이유에 명확하지 않다 LinksViewModel의 모든 설명을 주시면 감사하겠습니다.
편집에서 추가 한 DataContext 조각을 제거해도 여전히 작동합니까? 이 시나리오에서는 MainWindow 뷰의 datacontext를 설정한다고 가정합니다. –
내 편집에서 ...를 제거하면 LinksView에 MainWindowViewModel의 DataContext가 있습니다. –
BrianKE
LinksView에 datacontext 명시가 설정되어 있지 않으면 WPF는 TreeWindow에서 MainWindow의 datacontext를 찾는다. –