0

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

<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>

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

4

3 回答 3

1

我怀疑你喜欢在 TabItem 的标题中显示“FullName”,在 TabItem 的内容中显示“Position”。要同时装饰 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>
于 2013-03-05T04:00:29.180 回答
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,标准方式效果不佳。

于 2013-03-03T19:03:16.027 回答
0

试试这个:
删除Content="{Binding Position}"<navigation:SfTabItem替换

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

<TextBlock Text="{Binding Position}"/>. 并假设“位置”变量是单值变量(不是数组)并且它在您的 DataContext 上可用。

于 2013-03-03T03:09:12.073 回答