【问题标题】:ComoBox DropDownClosed is throwing exception while initializing XamlComboBox DropDown Close 在初始化 Xaml 时引发异常
【发布时间】:2018-08-03 00:26:32
【问题描述】:

我正在尝试在 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 事件不支持动态。

【问题讨论】:

    标签: c# xaml uwp


    【解决方案1】:

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

    我从msdngithub 中找到了类似的issue。并且源自 JerryNixon,这对您不起作用,因为信息事件不是路由事件。这是设计使然。目前有一个解决方法,您可以使用DataTriggerBehavior 比较IsDropDownOpen 的属性值来确定Combobox 是打开还是关闭。

    <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。所以你需要做一些逻辑来避免这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2013-05-15
      相关资源
      最近更新 更多