DataContext上的DataTrigger Binding访问属性,不是ItemsControl的集合

我遇到了DataTriggers中的一个问题,我正在使用它来为节点的ObservableCollection选择一个DataTemplate。

“我的窗口”有一个链接到ViewModel的DataContext,该模型包含一个NodeVM的ObservableCollection(称为OptionNodes),它具有NodeValid属性

我正在显示ItemsControl中的节点列表,并想根据NodeValid Propety的值选择DataTemplate,因此正在研究使用DataTriggers。

但是,DataTrigger正在查找链接到Windows DataContext的VM,而不是Observable集合中的VM

这是我正在使用的XAML

 <ItemsControl  ItemsSource="{Binding OptionNodes}" >
    <ItemsControl.ItemsPanel>
        <itemspaneltemplate>
            <WrapPanel Orientation="Horizontal" />
        </itemspaneltemplate>
    </ItemsControl.ItemsPanel>


    <ItemsControl.Style>
        <Style TargetType="ItemsControl">
            <Setter Property="ItemTemplate" Value="{StaticResource NodeTemplate}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=NodeValid}" Value="false">
                    <Setter Property="ItemTemplate" Value="{StaticResource BlankNodeTemplate}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ItemsControl.Style>
</ItemsControl>

编辑:

重定向到here后,我发现虽然没有对我的问题的解释,但是所提供的代码使我能够将XAML更改为有效的代码。

<ItemsControl  ItemsSource="{Binding OptionNodes}" >
    <ItemsControl.ItemsPanel>
        <itemspaneltemplate>
            <WrapPanel Orientation="Horizontal" />
        </itemspaneltemplate>
    </ItemsControl.ItemsPanel>


    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="ContentTemplate" Value="{StaticResource NodeTemplate}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=NodeValid}" Value="false">
                    <Setter Property="ContentTemplate" Value="{StaticResource BlankNodeTemplate}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

这使我想了解ItemsTemplate和ContentTemplate之间的区别,答案here基本上是说ItemsTemplate适用于集合中的所有项目,而ContentTemplate适用于单个项目。这意味着我的原始代码将无法工作,因为整个集合只能使用一个ItemTemplate,而使用Content模板意味着我可以将单个DataTemplate设置为集合中的不同Item

iCMS 回答:DataContext上的DataTrigger Binding访问属性,不是ItemsControl的集合

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2296699.html

大家都在问