C# 以编程方式执行EventTrigger

C# 以编程方式执行EventTrigger,c#,silverlight,C#,Silverlight,我在Silverlight中定义了一个控件,如下所示: <HyperlinkButton x:Name="testHyperlink" Content="Test" FontWeight="Bold" Click="testHyperlink_Click"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <ei:ChangePropertyAction Pr

我在Silverlight中定义了一个控件,如下所示:

<HyperlinkButton x:Name="testHyperlink" Content="Test" FontWeight="Bold" Click="testHyperlink_Click">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <ei:ChangePropertyAction PropertyName="Visibility" TargetName="panel1"   
        Value="Collapsed" />
      <ei:ChangePropertyAction PropertyName="Visibility" TargetName="panel2" 
        Value="Visible" />
    </i:EventTrigger>
    <i:EventTrigger>
      <ei:ChangePropertyAction PropertyName="Visibility" TargetName="panel1" 
        Value="Visible" />
      <ei:ChangePropertyAction PropertyName="Visibility" TargetName="panel2" 
        Value="Collapsed" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</HyperlinkButton>

此超链接是DataTemplate的一部分。这就是我使用触发器的原因。当有人单击Hyperlink按钮时,将触发一个异步进程。当进程完成时,我想执行第二个触发器。本质上,我正在改变某些内容的可见性


我的问题是,当我的事件完成时,如何触发与HyperlinkButton关联的第二个EventTrigger?

使用交互性EventTriggers是不正确的。直接回答你的问题,你可以做下一步(我写这篇文章只是因为我写不出这是不可能的,但我为这个解决方案感到羞愧):

使用公共调用创建自己的操作

    public class MyChangePropertyAction: ChangePropertyAction
    {
        public new void Invoke(object parameter)
        {
            base.Invoke(parameter);
        }
    }
使用它代替交互性ChangePropertyAction。现在,您可以直接从代码隐藏中获取调用操作:

((MyChangePropertyAction)Interaction.GetTriggers(testHyperlink)[1]).Invoke(parameter);
但是,我相信您可以简单地使用MVVM方法,然后执行以下操作:

  • 创建bool属性正忙于查看模型中的属性更改通知
  • 通过BooleanToVisibility转换器将其绑定到“panel1”可见性属性
  • 将命令DoServiceCall从视图模型绑定到“testHyperlink”命令属性
  • 并且在视图模型中进行服务调用,并根据是否显示面板将IsBusy属性更改为true或false
祝你好运