C# 以编程方式执行EventTrigger
我在Silverlight中定义了一个控件,如下所示: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
<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