2013-03-02 71 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,並且標準方式運行得不好。