2013-03-02 37 views
0

我对WinRT使用Syncfusion TabControl。工作正常,但是当我尝试将它绑定到某些数据无法理解时,如何正确执行。我的代码是这样的:Syncfusion TabControl和TabItems数据绑定

<navigation:SfTabControl 
    DisplayMemberPath="FullName"> 
    <navigation:SfTabItem Name="tabItemPosition" Content="{Binding Position}"> 
     <navigation:SfTabItem.ContentTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}"/> 
      </DataTemplate> 
     </navigation:SfTabItem.ContentTemplate> 
    </navigation:SfTabItem> 
</navigation:SfTabControl> 

但它只显示我的标题,但内容没有出现。任何建议,欢迎!

回答

1

我怀疑你喜欢在TabItem的头部显示“FullName”,在TabItem的内容中显示“位置”。为了装饰Header和Content,我们必须分别使用HeaderTemplate和ContentTemplate。

由于我们要使用DataTemplates,我们不再需要“DisplayMemberPath”。按照下面的代码片段,它应该工作。

<navigation:SfTabControl TabStripPlacement="Left" Margin="0 60" 
          Grid.ColumnSpan="2" HorizontalAlignment="Stretch" 
          x:Name="ParticipantsList" >       
     <!--For Header--> 
     <navigation:SfTabControl.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding FullName}" Style="{StaticResource HeaderTextStyle}" 
          VerticalAlignment="Top"/> 
      </DataTemplate> 
     </navigation:SfTabControl.HeaderTemplate> 

     <!--For Content--> 
     <navigation:SfTabControl.ContentTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Position}" Style="{StaticResource HeaderTextStyle}" 
          VerticalAlignment="Top"/> 
      </DataTemplate> 
     </navigation:SfTabControl.ContentTemplate> 
    </navigation:SfTabControl> 
+0

非常感谢!这就是我需要的! – 2013-03-05 05:16:31

0

试试这个:
<navigation:SfTabItem删除Content="{Binding Position}"<TextBlock Text="{Binding Position}"/>取代

<navigation:SfTabItem.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}"/> 
     </DataTemplate> 
    </navigation:SfTabItem.ContentTemplate> 

。并假设“Position”变量是单值可变的(不是数组),它可以在DataContext上使用。

+0

这必须工作,但我找不到如何设置DataContext。当我在设计时为页面或TabItem设置它时,它不起作用(可能是因为我异步从Windows Azure移动服务获取数据)。所以,我使用直接设置ParticipantsList.ItemsSource =参与者;但它将这种情况简单地绑定绑定对嵌套的TabItems不起作用。我只能看到pagename.ViewModelClassname字而不是真实的数据。 – 2013-03-03 09:32:06

+0

你说什么“嵌套TabItems”?你可以发布你的网页的整个代码? – SachiraChin 2013-03-03 12:44:47

0

页面的代码如下:

<Page 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:voteme" 
DataContext="{Binding Participants, RelativeSource={RelativeSource Self}}" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:navigation="using:Syncfusion.UI.Xaml.Controls.Navigation" 
xmlns:input="using:Syncfusion.UI.Xaml.Controls.Input" 
x:Class="voteme.RateAll" 
mc:Ignorable="d"> 
<Grid Style="{StaticResource LayoutRootStyle}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="140"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <!-- Back button and page title --> 
    <Grid Background="#FF939D46"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Button x:Name="backButton" Style="{StaticResource BackButtonLightStyle}" Margin="36" 
       VerticalAlignment="Top" Click="backButton_Click"/> 
     <StackPanel> 
      <TextBlock x:Name="pageTitle" Foreground="White" Grid.Column="1" Text="{StaticResource AppName}" 
        Style="{StaticResource PageHeaderTextStyle}" Margin="120 38" VerticalAlignment="Top"/> 
     </StackPanel> 
    </Grid> 

    <Grid Grid.Row="1"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="300"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid Grid.Column="1" Background="#FFEDEDEB" /> 
     <navigation:SfTabControl TabStripPlacement="Left" Margin="0 60" 
           Grid.ColumnSpan="2" HorizontalAlignment="Stretch" 
           x:Name="ParticipantsList" 
           DisplayMemberPath="FullName"> 
      <navigation:SfTabItem> 
       <TextBlock Text="{Binding Position}" Style="{StaticResource HeaderTextStyle}" VerticalAlignment="Top"/> 
      </navigation:SfTabItem> 
     </navigation:SfTabControl> 
    </Grid> 
</Grid>  

类代码(与TabContent和TabItem的)是这样的:

public List<ParticipantRatesView> Participants = new List<ParticipantRatesView>(); 
foreach (var participant in _persons) 
      { 
       Participants.Add(
         new ParticipantRatesView() 
          { 
           FullName = participant.FullName, 
           Position = participant.Position, 
           Email = participant.Email, 
           PersonId = participant.Id, 
           AverageRate = participant.TotalRate, 
           OfficeRate = ((Rates) _ratesAll.CurrentItem).OfficeRate, 
           WindowsRate = ((Rates) _ratesAll.CurrentItem).WindowsRate, 
           EmoRate = ((Rates) _ratesAll.CurrentItem).EmotionalRate, 
           CustRate = ((Rates) _ratesAll.CurrentItem).CustomerRate, 
           RateId = ((Rates) _ratesAll.CurrentItem).Id 
          }); 
      } 
    ParticipantsList.ItemsSource = Participants; 

由Syncfusion建议使用此方法,但他们根本没有记录TabItem,并且标准方式运行得不好。