Как связать от ContentTemplate до окружающего пользовательского элемента управления?

Изначально фильмы могут быть пустым массивом, и, поскольку вы обращаетесь к нулевой позиции индекса, вы должны проверить ее длину перед доступом к нулевому индексу.

Измените

  const movie = this.props.movies[0];

на

  if(this.props.movies.length){
      const movie = this.props.movies[0];
      console.log(movie);
 }

Поскольку фильмы всегда являются массивом, поэтому проверка их длины напрямую решит проблему

6
задан MikroDel 26 November 2013 в 13:22
поделиться

2 ответа

Попробуйте это. Я не уверен, будет ли это работать или нет, но

<TabItem 
    x:Name="Self"
    x:Class="App.MyTabItem"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:App"
    >
    <TabItem.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=ShortLabel}"/>
        </DataTemplate>
    </TabItem.ContentTemplate>
</TabItem>

Если это не работает, попытайтесь всунуть этот атрибут <TabItem/>:

DataContext="{Binding RelativeSource={RelativeSource self}}"
1
ответ дан 17 December 2019 в 20:36
поделиться

То, что, кажется, проблема, - то, что Вы используете ContentTemplate, на самом деле не используя свойство содержания. DataContext по умолчанию для DataTemplate ContentTemplate является свойством Content TabItem. Однако ни один из того, что я сказал на самом деле, не объясняет, почему привязка не работает. К сожалению, я не могу дать Вам, категорический ответ, но мое лучшее предположение - то, что это - вследствие того, что TabControl снова использует ContentPresenter для отображения свойства содержания для всех объектов вкладки.

Так, в Вашем случае я изменил бы код, чтобы выглядеть примерно так:

<TabItem
    x:Class="App.MyTabItem"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:App"
    Header="{Binding ShortLabel, RelativeSource={RelativeSource Self}}"
    Content="{Binding ShortLabel, RelativeSource={RelativeSource Self}}" />

Если бы ShortLabel является более сложным объектом и не только строкой затем, Вы хотели бы к indroduce ContentTemplate:

<TabItem
    x:Class="App.MyTabItem"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:app="clr-namespace:App"
    Header="{Binding ShortLabel, RelativeSource={RelativeSource Self}}"
    Content="{Binding ComplexShortLabel, RelativeSource={RelativeSource Self}}">
    <TabItem.ContentTemplate>
        <DataTemplate TargetType="{x:Type ComplexType}">
            <TextBlock Text="{Binding Property}" />
        </DataTemplate>
    </TabItem.ContentTemplate>
</TabItem>
1
ответ дан 17 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: