ComoBox DropDownClosed在初始化Xaml时引发异常

时间:2018-08-03 00:26:32

标签: c# xaml uwp

我正在尝试在ComboBox DropDownClosed上执行命令,但是在该页面的初始化上运行应用程序时会引发异常:

  

无法添加类型的实例   'Microsoft.Xaml.Interactions.Core.EventTriggerBehavior'到   “ Microsoft.Xaml.Interactivity.BehaviorCollection”类型的集合。

Xaml:

<ComboBox x:Name="MyCombo" FontSize="20" ItemsSource="{Binding Path=MyViewModel.MyProperty, Mode=TwoWay}"
      HorizontalAlignment="Stretch" Margin="10,10,10,0" Height="56" SelectedItem="{Binding MyViewModel.MyAnotherProperty, Mode=TwoWay}">
    <interactivity:Interaction.Behaviors>
          <core:EventTriggerBehavior EventName="DropDownClosed">
              <core:InvokeCommandAction Command="{Binding MyViewModel.MyCommand}"/>
          </core:EventTriggerBehavior>
     </interactivity:Interaction.Behaviors>
</ComboBox>

编辑:

我搜索了此错误的可能原因,结果发现我错过了传递元素名称的机会

<core:EventTriggerBehavior EventName="DropDownClosed" SourceObject="{Binding ElementName=MyCombo}>

现在它抛出以下错误:

  

System.InvalidOperationException:添加或删除事件处理程序   WinRT事件不支持动态地运行。

1 个答案:

答案 0 :(得分:0)

  

System.InvalidOperationException:WinRT事件不支持动态添加或删除事件处理程序。

我从issuemsdn找到了类似的github。并从JerryNixon派生,这对您不起作用,因为信息事件不是路由事件。这是设计使然。当前有一种解决方法,您可以使用DataTriggerBehavior比较IsDropDownOpen属性值来确定组合框是打开还是关闭。

<interactivity:Interaction.Behaviors>
    <core:DataTriggerBehavior Binding="{Binding IsDropDownOpen,ElementName=Comb}" ComparisonCondition="NotEqual" Value="True" >
        <core:InvokeCommandAction Command="{x:Bind ItemCommand}"/>
    </core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>

请注意,在加载组合框后将调用ItemCommand,因为IsDropDownOpen的默认值为false。因此,您需要采取一些逻辑措施来避免这种情况。