Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于复选框更改WPF中的ListBox数据模板_Wpf_Xaml_Listbox_Datatemplate_Datatrigger - Fatal编程技术网

如何基于复选框更改WPF中的ListBox数据模板

如何基于复选框更改WPF中的ListBox数据模板,wpf,xaml,listbox,datatemplate,datatrigger,Wpf,Xaml,Listbox,Datatemplate,Datatrigger,我试图应用DataTrigger来更改列表框的DataTemplate,得到错误: “错误1找不到触发器目标'IssueListBox'。(目标必须出现在使用它的任何设置程序、触发器或条件之前)。” 在我的主窗口中有一个列表框(在DockPanel以及其他控件中): 如何使触发器工作?Google先生让我失望了,像这样的例子比比皆是,但它们不是基于另一个控件。您的数据模板是在app.xaml中定义的静态资源,您正在尝试将元素名称绑定到元素IssueListBox,而该元素不在同一范围内。即使这样

我试图应用
DataTrigger
来更改
列表框的
DataTemplate
,得到错误:

“错误1找不到触发器目标'IssueListBox'。(目标必须出现在使用它的任何设置程序、触发器或条件之前)。”

在我的主
窗口中有一个
列表框
(在
DockPanel
以及其他控件中):


如何使
触发器
工作?Google先生让我失望了,像这样的例子比比皆是,但它们不是基于另一个控件。

您的数据模板是在app.xaml中定义的静态资源,您正在尝试将元素名称绑定到元素IssueListBox,而该元素不在同一范围内。即使这样,你想做的就是这样。Listbox有一个数据模板DT,在DT中,您试图返回列表框并将其数据模板设置为另一个(而不是DT)


为什么不合并这些模板,将细节的可见性设置为“折叠”,并根据属性触发可见性。然后,您根本不必引用列表框,模板保持不变,只需在需要查看详细信息时在内部更改即可。

在DataTrigger中,您将ItemTemplate设置为包含它的DataTemplate-ShowIssueSimple。这只是打字错误吗?我猜你的意思是Value=“{StaticResource showsissuedetail}”。是的,是的,是一个“输入错误”(:感谢大家的提醒,修正了这一点,尽管我仍然在想,如果我需要两个模板,我会如何处理它。当我刚刚在checked.changed事件中添加了一个事件处理程序时,生活变得轻松多了,但是我正在努力培养更好的习惯,因为我正在学习并在学习xaml的同时尽可能多地使用MVVMish使用数据模板选择器,但这是在添加数据模板时,而不是在属性更改时,在数据模板之间进行选择。
<ListBox x:Name="IssueListBox"
  ItemsSource="{Binding}"
    ItemTemplate="{StaticResource ShowIssueSimple}" 
    IsSynchronizedWithCurrentItem="True"
    HorizontalContentAlignment="Stretch" 
    BorderThickness="3" DockPanel.Dock="Top" 
    VerticalContentAlignment="Stretch" Margin="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>