2011-03-24 75 views
1

我有一个枢轴标题模板,以便枢轴页面有一个标题和副标题。我想通过代码设置。WP7枢轴标题模板DataContext绑定不起作用

我在Blend中构建了XAML,并且没有代码绑定,它显示出来以便部分工作。

但是,我的绑定不起作用。它要么不会构建,因为该对象没有DataContext,或者该对象不存在于当前上下文中,或者构建但不会显示。当它不显示时,我假设我绑定了错误的XAML对象。每个对象都被命名,所以我可以找到合适的对象来绑定。

的标题和副标题的绑定代码包含类的样子:

public class PivotTitle 
{ 
    public string Title = ""; 
    public string Subtitle = ""; 
} 

我的问题是:我该如何正确地绑定TitleTemplate使两者的TextBlocks'文本属性可以在代码中设置?

这里是XAML

 <controls:Pivot.TitleTemplate > 
      <DataTemplate x:Name="PivotTitleTemplateDataTemplate" > 
       <StackPanel x:Name="MyPivotTitle" DataContext="{Binding}" > 
        <TextBlock x:Name="Title" 
         Text="{Binding Title}" 
         FontSize="20" 
         TextWrapping="Wrap"/> 
        <TextBlock x:Name="Subtitle" 
         Text="{Binding Subtitle}" 
         Foreground="Gray" 
         TextWrapping="Wrap"/> 
       </StackPanel> 
      </DataTemplate> 
     </controls:Pivot.TitleTemplate> 

的标题和副标题都依赖从导航的页面上。后面的代码看起来像:

//定义在页面顶部 public PivotTitle _PivotTitle = new PivotTitle();

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 


     string queryStringDeploymentName = ""; 

     this.NavigationContext.QueryString.ContainsKey("DeploymentName")) 

     _PivotTitle.Title = SelectedDeployment.DeploymentName; 
     _PivotTitle.Subtitle = App.ViewModel.AppSettings.UpdatedText; 
     MyPivotTitle.DataContext = _PivotTitle; 
    } 

此特定示例不会生成此错误:名称'MyPivotTitle'在当前上下文中不存在。在数据透视页的列表框上的绑定工作正常。

我相信我的代码隐藏和整体XAML是正确的。我认为我的DataContext绑定不正确。

感谢您的任何帮助。

回答

2

在您的示例中MyPivotTitle是DataTemplate中的一个元素,因此无法直接从您的代码中访问,因此出现错误。如果您需要访问项目控件(例如Pivot或ListBox)的模板内的控件,那么您可能会发现WIndowsPhoneGeek.com的this article有用。

但是,听起来好像你可以在没有任何“黑客行为”的情况下做到这一点。这个标题和副标题是为单个数据透视图项目设计的,还是将它放在所有的透视项目上?还有什么其他数据,如果有的话,你绑定在数据透视表上?

+0

这个想法是通过代码根据显示哪个透视图来统一控制应用程序枢纽中的标题和副标题。理想的是一个代码类来管理它,而不是触摸每个透视页面代码。 似乎我应该可以在应用程序级别执行此操作,但我陷入了Silverlight,这是我刚刚接触的新手。 – DFBerry 2011-03-26 12:24:24