Как изменить ListBox DataTemplate в WPF на основе CheckBox - PullRequest
1 голос
/ 13 января 2010

Я пытаюсь применить DataTrigger, чтобы изменить DataTemplate для ListBox, и получаю ошибку:

"Error 1 Cannot find the Trigger target 'IssueListBox'. (The target must appear before any Setters, Triggers, or Conditions that use it.)"

У меня есть ListBox в моем основном WindowDockPanel вместе с другими элементами управления):

<ListBox x:Name="IssueListBox"
  ItemsSource="{Binding}"
    ItemTemplate="{StaticResource ShowIssueSimple}" 
    IsSynchronizedWithCurrentItem="True"
    HorizontalContentAlignment="Stretch" 
    BorderThickness="3" DockPanel.Dock="Top" 
    VerticalContentAlignment="Stretch" Margin="2"/>

У меня есть пара DataTemplate s в App.xaml с DataTrigger внизу 2-го шаблона:

    <DataTemplate x:Key="ShowIssueDetail">
        <Border CornerRadius="4, 8, 4, 8" Margin="2" MinWidth="400" BorderThickness="3" 
                BorderBrush="{Binding Path=IssUrgency, Converter={StaticResource IntToRYGBBoarderBrushConverter}}">
            <StackPanel Orientation="Horizontal">
                 <StackPanel Margin="10">
                    <TextBlock Text="{Binding IssSubject}" FontWeight="Bold" FontSize="14"/>
                    <StackPanel Width="Auto" Orientation="Horizontal">
                        <TextBlock Text="Due: " FontWeight="Bold"/>
                        <TextBlock Text="{Binding IssDueDate}" FontStyle="Italic" HorizontalAlignment="Left"/>
                    </StackPanel>
                    <StackPanel Width="Auto" Orientation="Horizontal">
                        <TextBlock Text="Category: " FontWeight="Bold"/>
                        <TextBlock Text="{Binding IssCategory}"/>
                    </StackPanel>
                </StackPanel>
            </StackPanel>
        </Border>
    </DataTemplate>

    <DataTemplate x:Key="ShowIssueSimple">

        <Border CornerRadius="6" 
                Margin="2,1,2,1"
                MinWidth="400"
                BorderThickness="2" 
                SnapsToDevicePixels="True"
                BorderBrush="{Binding Path=IssUrgency, Converter={StaticResource IntToRYGBBoarderBrushConverter}}">
            <StackPanel Margin="5">
                <TextBlock Text="{Binding IssSubject}" FontWeight="Bold" FontSize="14"/>
            </StackPanel>
        </Border>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Source={StaticResource sbvm}, Path=ShowDetailListItems}" Value="True">
                <Setter TargetName="IssueListBox" Property="ItemTemplate" Value="{StaticResource ShowIssueDetail}"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>

Как мне заставить Trigger работать? Мистер Google подвел меня, таких примеров много, но они не основаны на другом контроле.

1 Ответ

3 голосов
/ 13 января 2010

Ваш шаблон данных является StaticResource, определенным в app.xaml, вы пытаетесь связать имя элемента с элементом IssueListBox, который не существует в той же области. Даже тогда вы пытаетесь сделать это. У Listbox есть шаблон данных DT, внутри DT вы пытаетесь вернуться обратно в поле List и установить его DataTemplate на другой (не DT).

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

...