1
我试图在用户看到一个视图(BiometricVM)时看到触发器。有问题的视图在另一个视图(ParentView.xaml)中实例化并隐藏。我在这里阅读了几个答案,但他们都没有工作。下面是相关代码:UserControl EventTrigger when visible
ParentView.xaml
<Border BorderBrush="Black" BorderThickness="1" Background="#80000000" Visibility="{Binding BiometricViewVisible, Converter={StaticResource BooleanToVisibilityConverter}}" Grid.RowSpan="2" >
<Grid>
<WrapPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
<Border Style="{StaticResource DefaultWindowBorder}" >
<Grid Background="White" >
<vw:BiometricView DataContext="{Binding BiometricVM}" Visibility="{Binding BiometricViewVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>
</Border>
</WrapPanel>
</Grid>
</Border>
ParentViewModel.cs
public bool BiometricViewVisible
{
get
{
return _biometricViewVisible;
}
set
{
_biometricViewVisible = value;
OnPropertyChanged(nameof(BiometricViewVisible));
}
}
BiometricView.xaml
<i:Interaction.Triggers>
<i:EventTrigger EventName="IsVisibleChanged">
<i:InvokeCommandAction Command="{Binding Path=OnLoadedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
这是没有得到所谓的命令( OnLoadedCommand)。
在这个问题上的任何帮助,将不胜感激。
这个问题似乎是'IsVisibleChanged'是DependendyPropertyChanged事件,而不是一个'RoutedEvent'和'我:EventTrigger'只有路由事件的作品。例如'MouseDown'是一个'RoutedEvent':如果将'EventName'改为'MouseDown',那么当控件可见时,点击它应该调用'OnLoadedCommand'。这并不能帮助你。您可以使用常规事件处理程序撤退并执行此操作,也可以编写自己的行为,以便在依赖项属性更改事件上执行命令。 –
@EdPlunkett只有在视图对用户可见时才能调用BiometricViewModel.cs类的最佳方法是什么? –
如果它是您的类,请使用DependencyPropertyDescriptor.FromProperty获取其Visibility属性的dpd并调用AddValueChanged以添加处理程序。这是最快的。如果你愿意,你可以将其推广为一种行为。 –