2014-10-23 2 views
1

Я хочу показать TextBlock, когда у LongListSelector нет предметов. Я могу сделать это для каждого списка в моем приложении, но это не так. Поэтому я пытаюсь изменить стиль списка и сделать это для каждого списка.LongListSelector пустой стиль

Как я могу привязать к элементу LongListSelector ItemsSouce внутри его стиля?

Вот где я сейчас.

<Style TargetType="phone:LongListSelector"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="phone:LongListSelector"> 
       <Grid Background="{TemplateBinding Background}"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="ScrollStates"> 
          <VisualStateGroup.Transitions> 
           <VisualTransition GeneratedDuration="00:00:00.5" /> 
          </VisualStateGroup.Transitions> 
          <VisualState x:Name="Scrolling"> 
           <Storyboard> 
            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="VerticalScrollBar" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="NotScrolling" /> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid Margin="{TemplateBinding Padding}"> 
         <i:Interaction.Triggers> 
          <!-- HERE I CANT BIND TO COUNT --> 
          <ec:DataTrigger Binding="{TemplateBinding ItemsSource}" Comparison="Equal" Value="0"> 
           <ec:ChangePropertyAction TargetObject="{Binding ElementName=EmptyListText}" PropertyName="Visibility" Value="Visible" /> 
          </ec:DataTrigger> 
         </i:Interaction.Triggers> 
         <ViewportControl x:Name="ViewportControl" HorizontalContentAlignment="Stretch" VerticalAlignment="Top" /> 
         <ScrollBar x:Name="VerticalScrollBar" Opacity="0" Background="{StaticResource ThemeBackground}" HorizontalAlignment="Right" Orientation="Vertical" /> 
         <TextBlock x:Name="EmptyListText" Visibility="Collapsed" Text="{Binding Source={StaticResource Literals}, Path=Literals.noResults}" /> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ответ

0

Это проблема передачи данных.

Попробуйте подключить его к TemplateParent (который является LongListSelector) как так:

<ec:DataTrigger 
    Binding="{Binding RelativeSource={RelativeSource Mode=TemplateParent}, Path=ItemsSource.Count}" 
    Comparison="Equal" Value="0"> 
</ec:DataTrigger> 

Это должно установить вам прямо, если вы хотите использовать триггеры.


Мне нравится использовать Converters. Это немного проще понять, так что полное решение с помощью конвертера.

using System.Collections.ObjectModel; 
using System.ComponentModel; 
using System.Windows.Data; 

public class MyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
      return Visibility.Collapsed; 
     else 
     { 
      if (value is System.Collections.IList) 
      { 
       System.Collections.IList list = (System.Collections.IList)value; 
       if (list.Count == 0) 
        return Visibility.Collapsed; 
       else 
        return Visibility.Visible; 

      } 
      else 
       return Visibility.Collapsed;     
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 

Так LongListSelector Стиль:

<TextBlock Visibility="{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource MyConverter}}"></TextBlock> 
+0

Он работал отлично! но в вашем первом примере отсутствует слово «Binding». должен быть: Binding = "{Binding RelativeSource = {RelativeSource Mode = TemplateParent}, Path = ItemsSource.Count}" –

+0

@MarcelodeAguiar не использовал поведение/триггеры в какое-то время, спасибо за комментарии. Я изменю его. Рад, что это сработало для вас. :) –

0

Создание пользовательского составного элемента управления на основе длинного списка выборе, который делает то, что требуется, и имеет ум, чтобы показать конкретное сообщение за свойство зависимостей.

Смежные вопросы