我正在尝试在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事件不支持动态地运行。
答案 0 :(得分:0)
System.InvalidOperationException:WinRT事件不支持动态添加或删除事件处理程序。
我从issue和msdn找到了类似的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。因此,您需要采取一些逻辑措施来避免这种情况。