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以添加處理程序。這是最快的。如果你願意,你可以將其推廣爲一種行爲。 –