条件绑定属性不起作用?

dan*_*dan 20 wpf binding conditional-statements

我一直在努力使用这段代码一段时间,似乎无法找到我的问题的任何完整答案.我创建了一个小样本来说明问题:

<ListView >
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
        <StackPanel Margin="0,0,20,0" IsItemsHost="True" />
    </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.Items>
        <TextBlock>Test1</TextBlock>
        <TextBlock>Test2</TextBlock>
        <TextBlock>Test3</TextBlock>
        <TextBlock>Test4</TextBlock>
        <TextBlock>Test5</TextBlock>
    </ListView.Items>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Grid>
                        <ContentPresenter/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                 <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
                                 <Condition Property="IsSelected" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
         </Style>
     </ListView.ItemContainerStyle>
 </ListView>
Run Code Online (Sandbox Code Playgroud)

根据MultiTrigger设置,当鼠标不再位于所选项目上时,应重新显示所选项目.但是,此代码会生成一个InvalidOperationException,并显示消息"必须具有'Property'的非空值." 如果删除使用"绑定"属性的条件,则不会抛出异常.在MSDN文档中,它声明您必须设置Property或Binding属性.未设置上述代码函数,如Binding属性.实际上,在我的所有测试用例中,Binding属性的设置并不重要; 仍然抛出异常.有什么想法吗?

dan*_*dan 52

这是你不得不吮吸并承认自己犯了傻瓜错误的时候之一.然而,为了挽救其他一些不幸的灵魂,我会透露我的顿悟.

首先,如果我已经阅读了所有文档,我会阅读部分,如果您使用条件的"绑定"属性,它需要包含在MultiDataTrigger元素中(而不是我发布的示例中的MutiTrigger元素) .

其次,在进行这些更改后,MultiTrigger元素将替换为以下代码:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
        <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/>
    </MultiDataTrigger.Conditions>
    <Setter Property="Visibility" Value="Collapsed"/>
</MultiDataTrigger>
Run Code Online (Sandbox Code Playgroud)

现在该示例有效但由于所选项目已折叠,触发条件来回切换,导致所选项目闪烁进出视图.有道理,但诚然不是我的意图.

无论如何,希望这有助于某人犯同样的错误!

  • +1用于引导我使用解决方案比实际搜索和阅读文档更快.该错误应该解释了这一点,而不是依赖于文档. (3认同)
  • +1用于承认愚蠢并提供解决方案.其他人会遇到这种情况.缺少"数据"这个词很容易被忽视. (2认同)