WPF从ContentTemplate内部访问父ViewModel

时间:2012-06-19 20:42:19

标签: c# wpf caliburn.micro

我有一个带有模板化内容的TabControl,如下所示:

<TabControl x:Name="Items" SelectedItem="{Binding ActiveItem}" TabStripPlacement="Left" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1">
    <TabControl.ItemContainerStyle>
        <!--Some style stuff-->
    </TabControl.ItemContainerStyle>
    <TabControl.Template>
        <ControlTemplate TargetType="{x:Type TabControl}">
             <!--Some structure stuff including a tabpanel and contentPresenter-->
        </ControlTemplate>
     </TabControl.Template>
     <TabControl.ContentTemplate>
         <DataTemplate>
              <Button x:Name="MyButton" Visibility="{Binding x}" />
         </DataTemplate>
     </TabControl.ContentTemplate>
</TabControl>

包含此TabControl的视图使用类似于此的ViewModel:

public class MyPageViewModel : ScreenConductorViewModelBase<IMyTab>
{
    public Visibility x = Visibility.Hidden;
}

我希望模板中按钮的可见性从我的父(?)ViewModel中拉出,但是它试图从项viewModel中检索x。

这对我有意义,但我不知道如何指定这个字段应该来自父母。

我尝试过一些东西,但似乎没有一件事能起作用:

   {Binding x}
   {Binding DataContext.x}
   {Binding RelativeSource={RelativeSource TemplatedParent}, Path=x}

我确定这样做必须简单,但我似乎无法解决绑定语法

1 个答案:

答案 0 :(得分:3)

尝试

<Button x:Name="MyButton"
        Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}},
                             Path=DataContext.x}" />