wpf 帮助将数据绑定到 TabControl 中的控件

马特威尔逊

所以我有一个带有两个 TabItem 的 TabControl,每个 TabItem 上都有相同的控件(8 个 TextBlock),并且将在与另一个 TabItem 上的对应项相同的绑定下显示数据。我拥有的 xaml 和 cs 代码如下,但是当我尝试执行它时,出现此错误。

在使用 ItemsSource 之前,Items 集合必须为空。

TabItem 结构的 XAML

<TabControl Name="tbcIndividualStats" HorizontalAlignment="Left" Height="652" VerticalAlignment="Top" Width="1338" ItemsSouce="{Binding tabcontrolitems}">
  <!--Template for all tabs (idea is to have them dynamically created eventually)-->
  <!--Content template-->
  <TabControl.ContentTemplate>
    <DataTemplate>
      <Grid>
        <!--Border just holds the stuff-->
        <Border BorderBrush="#FF53535B" BorderThickness="3" HorizontalAlignment="Left" Height="452" VerticalAlignment="Top" Width="520" Margin="10,135,0,0">
          <StackPanel Margin="0,0,-1,0">
            <TextBlock Name="txtVenue" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding Venue}" />
            <TextBlock Name="txtTopSpeed" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TopSpeed}" />
            <TextBlock Name="txtDistRun" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding DistRun}" />
            <TextBlock Name="txtTimeLow" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeLow}" />
            <TextBlock Name="txtTimeMed" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeMed}" />
            <TextBlock Name="txtTimeHigh" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeHigh}" />
            <TextBlock Name="txtTimeSprint" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeSprint}" />
            <TextBlock Name="txtSprintDist" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding SprintDist}" />
          </StackPanel>
        </Border>
      </Grid>
    </DataTemplate>
  </TabControl.ContentTemplate>

  <!--Item Template-->
  <TabControl.ItemTemplate>
    <DataTemplate>
      <Grid>
        <!--Border just holds the stuff-->
        <Border BorderBrush="#FF53535B" BorderThickness="3" HorizontalAlignment="Left" Height="452" VerticalAlignment="Top" Width="520" Margin="10,135,0,0">
          <StackPanel Margin="0,0,-1,0">
            <TextBlock Name="txtVenue" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding Venue}" />
            <TextBlock Name="txtTopSpeed" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TopSpeed}" />
            <TextBlock Name="txtDistRun" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding DistRun}" />
            <TextBlock Name="txtTimeLow" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeLow}" />
            <TextBlock Name="txtTimeMed" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeMed}" />
            <TextBlock Name="txtTimeHigh" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeHigh}" />
            <TextBlock Name="txtTimeSprint" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeSprint}" />
            <TextBlock Name="txtSprintDist" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding SprintDist}" />
          </StackPanel>
        </Border>
      </Grid>
    </DataTemplate>
  </TabControl.ItemTemplate>
  <TabItem Header="PlayerName" Background="Transparent" />
  <TabItem Header="PlayerName2" Background="Transparent" />
</TabControl>

用于绑定数据的 C#

public class TabItemContent
{
    public string Venue { get; set; }
    public string TopSpeed { get; set; }
    public string DistRun { get; set; }
    public string TimeLow { get; set; }
    public string TimeMed { get; set; }
    public string TimeHigh { get; set; }
    public string TimeSprint { get; set; }
    public string DistSprint { get; set; }
}

public void foo()
{
//All one line of code
//FileLoadData is a List of another class where all my data is stored
var tabitemcontents = new List<TabItemContent> { new TabItemContent { Venue = FileLoadData[0].Venue, TopSpeed = FileLoadData[0].TopSpeed.ToString(), DistRun = FileLoadData[0].TotalDistance.ToString(), TimeLow = FileLoadData[0].TimeLow.ToString(),
        TimeMed = FileLoadData[0].TimeMed.ToString(), TimeHigh = FileLoadData[0].TimeHigh.ToString(), TimeSprint = FileLoadData[0].TimeSprint.ToString(), DistSprint = "null"},
        new TabItemContent { Venue = FileLoadData[1].Venue, TopSpeed = FileLoadData[1].TopSpeed.ToString(), DistRun = FileLoadData[1].TotalDistance.ToString(), TimeLow = FileLoadData[1].TimeLow.ToString(),
        TimeMed = FileLoadData[1].TimeMed.ToString(), TimeHigh = FileLoadData[1].TimeHigh.ToString(), TimeSprint = FileLoadData[1].TimeSprint.ToString(), DistSprint = "null"}};

//Error here, supposed to add to the TabItems
tbcIndividualStats.ItemsSource = tabitemcontents;
}

多年来,我一直在寻找解决方案,但始终无法解决问题。我只需要将 FileLoadData[0] 和 FileLoadData[1] 中的数据分别绑定到两个 TabItem。

巴比伦帕

我会采取不同的策略:

添加到您的模型中,您要在 Tabitem标题显示的名称:

public class TabItemContent
{
    public string PlayerName {get; set;}  // New Property for the Tabitem Header
    public string Venue { get; set; }
    public string TopSpeed { get; set; }
    public string DistRun { get; set; }
    public string TimeLow { get; set; }
    public string TimeMed { get; set; }
    public string TimeHigh { get; set; }
    public string TimeSprint { get; set; }
    public string DistSprint { get; set; }
}

然后我会考虑到这个新属性来更改 Xaml:

<TabControl Name="tbcIndividualStats" HorizontalAlignment="Left" Height="652" VerticalAlignment="Top" Width="1338">
  <!--Template for all tabs (idea is to have them dynamically created eventually)-->
  <!--Content template-->
  <TabControl.ContentTemplate>
    <DataTemplate>
      <Grid>
        <!--Border just holds the stuff-->
        <Border BorderBrush="#FF53535B" BorderThickness="3" HorizontalAlignment="Left" Height="452" VerticalAlignment="Top" Width="520" Margin="10,135,0,0">
          <StackPanel Margin="0,0,-1,0">
            <TextBlock Name="txtVenue" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding Venue}" />
            <TextBlock Name="txtTopSpeed" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TopSpeed}" />
            <TextBlock Name="txtDistRun" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding DistRun}" />
            <TextBlock Name="txtTimeLow" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeLow}" />
            <TextBlock Name="txtTimeMed" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeMed}" />
            <TextBlock Name="txtTimeHigh" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeHigh}" />
            <TextBlock Name="txtTimeSprint" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding TimeSprint}" />
            <TextBlock Name="txtSprintDist" Margin="10,7" FontSize="30" Foreground="White" Text="{Binding SprintDist}" />
          </StackPanel>
        </Border>
      </Grid>
    </DataTemplate>
  </TabControl.ContentTemplate>

  <!--Item Template-->
  <TabControl.ItemTemplate>
    <DataTemplate>
        <Border>
            <Textblock = Text="{Binding PlayerName}"/>
        </Border>
    </DataTemplate>
  </TabControl.ItemTemplate>
</TabControl>

编辑:项目模板是 tabitem 按钮的模板,内容模板是其内容。这里有一些参考:TabItem.ItemTemplate 与 TabItem.ContentTemplate

我还删除了 TabControl 中定义的两个 TabItem。

还要记住设置的ItemsSource - >如果你在代码隐藏设置,删除这一行:ItemsSouce="{Binding tabcontrolitems}"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数据将Int属性绑定到WPF中的Enum

来自分类Dev

将ObservableCollections的ObservableCollection绑定到TabControl TabItems中的嵌套ListView

来自分类Dev

WPF MVVM将图像控件绑定到资源中的图像

来自分类Dev

如何将单个属性绑定到WPF中两个控件的选择?

来自分类Dev

使TabControl标题在WPF中可滚动

来自分类Dev

如何将数据绑定到WPF中的gridcontrol

来自分类Dev

在WPF中的用户控件之间传递数据

来自分类Dev

Tabcontrol TabItem中的WPF页面延迟加载

来自分类Dev

在Elmish.WPF(F#)中,如何编写绑定来支持另一个具有不同模型的tabcontrol中的tabcontrol?

来自分类Dev

TabControl WPF中的TabControl

来自分类Dev

数据将Int属性绑定到WPF中的Enum

来自分类Dev

绑定到数据模板控件WPF

来自分类Dev

WPF MVVM将图像控件绑定到资源中的图像

来自分类Dev

如何将单个属性绑定到WPF中两个控件的选择?

来自分类Dev

WPF绑定到控件集合

来自分类Dev

在WPF TreeView中嵌套数据绑定控件

来自分类Dev

WPF数据将ViewModel属性绑定到用户控件内部的ListBox中,背后的代码

来自分类Dev

如何将WPF TabControl ContentTemplate绑定到不同ViewModel的可观察集合

来自分类Dev

在TabControl WPF问题中异步绑定到SelectedItem

来自分类Dev

如何将TabControl内容的数据上下文绑定到ObservableCollection中的视图模型的实例

来自分类Dev

同一控件WPF中的两个数据绑定

来自分类Dev

在Wpf GridView中,如何将控件绑定到一个项目中的另一个控件

来自分类Dev

将 WPF 控件名称绑定到不同的控件

来自分类Dev

WPF:自定义创建的用户控件中的数据绑定

来自分类Dev

单击 TabControl 的当前 tabItem(在 WPF 中)

来自分类Dev

如何通过 XAML 在 WPF TabControl 中添加控件

来自分类Dev

WPF:将静态资源绑定到用户控件中的依赖项属性

来自分类Dev

wpf 将不同的数据模板绑定到内容控件中的不同类型的对象

来自分类Dev

WPF 将 TabControl 项内容绑定到不同的数据模板

Related 相关文章

  1. 1

    数据将Int属性绑定到WPF中的Enum

  2. 2

    将ObservableCollections的ObservableCollection绑定到TabControl TabItems中的嵌套ListView

  3. 3

    WPF MVVM将图像控件绑定到资源中的图像

  4. 4

    如何将单个属性绑定到WPF中两个控件的选择?

  5. 5

    使TabControl标题在WPF中可滚动

  6. 6

    如何将数据绑定到WPF中的gridcontrol

  7. 7

    在WPF中的用户控件之间传递数据

  8. 8

    Tabcontrol TabItem中的WPF页面延迟加载

  9. 9

    在Elmish.WPF(F#)中,如何编写绑定来支持另一个具有不同模型的tabcontrol中的tabcontrol?

  10. 10

    TabControl WPF中的TabControl

  11. 11

    数据将Int属性绑定到WPF中的Enum

  12. 12

    绑定到数据模板控件WPF

  13. 13

    WPF MVVM将图像控件绑定到资源中的图像

  14. 14

    如何将单个属性绑定到WPF中两个控件的选择?

  15. 15

    WPF绑定到控件集合

  16. 16

    在WPF TreeView中嵌套数据绑定控件

  17. 17

    WPF数据将ViewModel属性绑定到用户控件内部的ListBox中,背后的代码

  18. 18

    如何将WPF TabControl ContentTemplate绑定到不同ViewModel的可观察集合

  19. 19

    在TabControl WPF问题中异步绑定到SelectedItem

  20. 20

    如何将TabControl内容的数据上下文绑定到ObservableCollection中的视图模型的实例

  21. 21

    同一控件WPF中的两个数据绑定

  22. 22

    在Wpf GridView中,如何将控件绑定到一个项目中的另一个控件

  23. 23

    将 WPF 控件名称绑定到不同的控件

  24. 24

    WPF:自定义创建的用户控件中的数据绑定

  25. 25

    单击 TabControl 的当前 tabItem(在 WPF 中)

  26. 26

    如何通过 XAML 在 WPF TabControl 中添加控件

  27. 27

    WPF:将静态资源绑定到用户控件中的依赖项属性

  28. 28

    wpf 将不同的数据模板绑定到内容控件中的不同类型的对象

  29. 29

    WPF 将 TabControl 项内容绑定到不同的数据模板

热门标签

归档