2013-09-02 1 views
2

Я пытаюсь изменить текст текстового блока на основе datatrigger. DataTrigger выглядит следующим образом: изменение привязки на основе свойства datatrigger

<Style.Triggers> 
     <DataTrigger Binding="{Binding Path=ShowFileExtensionsProperty}" Value="true"> 
      <Setter Property="Text" Value="{Binding Path=Name}" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=ShowFileExtensionsProperty}" Value="false"> 
      <Setter Property="Text" Value="{Binding Path=NameWithoutExtension}" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Этот код находится в XAML файле класса «MyView» Файл Кс этого класса содержит следующий код:

public static readonly DependencyProperty ShowFileExtensionsProperty = 
DependencyProperty.Register("ShowFileExtensions", typeof(bool), typeof(MyView), new UIPropertyMetadata(false)); 

public bool ShowFileExtensions 
{ 
    get { return (bool)GetValue(ShowFileExtensionsProperty); } 
    set 
    { 
     SetValue(ShowFileExtensionsProperty, value); 
     updateViewCollection(); 
    } 
} 

отображается TextBlock в списке, связанном со списком объектов, эти объекты содержат свойство «Имя» и «NameWithoutExtension».

Проблема в том, что текст в текстовом блоке всегда остается пустым. Каким-то образом дататригер никогда не срабатывает. Любая идея, что не так с datatriggers?

PS: Полный код следует

<UserControl x:Class="com.xploreplus.Filedrops.explorer.listview.FiledropsFileList" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:l="clr-namespace:com.xploreplus.Filedrops.explorer.listview.views" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<UserControl.Resources> 
    <Style x:Key="Extension" TargetType="{x:Type TextBlock}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=ShowFileExtensionsProperty, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Value="true"> 
       <Setter Property="Text" Value="brol2" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Path=ShowFileExtensionsProperty, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Value="false"> 
       <Setter Property="Text" Value="blabla" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

</UserControl.Resources> 

<Grid> 
    <ListView Name="viewComponent"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header=""> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <Image Width="16" Height="16" Source="{Binding Path=Icon}" /> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Name"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Style="{StaticResource Extension}" /> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Extension" DisplayMemberBinding="{Binding Path=Extension}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

+0

Это может быть полезно: http://stackoverflow.com/a/16697392/620360 – LPL

ответ

0

Как TextBlocks показаны в ListView, то DataContext из TextBlock будет ли ItemDataContext, если не установлено явно. Вот почему ваши привязки не работают. Вы должны будете предоставить RelativeSource связывания

Попробуйте обновить привязок как

<DataTrigger Binding="{Binding Path=ShowFileExtensions, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Value="true"> 

используется {х: Тип управления} при условии, что это тип вашей точки зрения еще вы должны изменить ваш тип просмотра ,

Надеется, что это помогает

Благодаря

+0

Типа в моем случае был UserControl. Поэтому я изменил его на: Unfortunatley, это не сработало. Текст остается пустым. – genz

+0

Вы получаете какое-либо исключение в окне вывода относительно этой привязки? – Nitin

+0

Нет, исключений нет. Текст остается пустым. – genz

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

  • Нет связанных вопросов^_^