2017-04-04 40 views
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)。

在這個問題上的任何幫助,將不勝感激。

+2

這個問題似乎是'IsVisibleChanged'是DependendyPropertyChanged事件,而不是一個'RoutedEvent'和'我:EventTrigger'只有路由事件的作品。例如'MouseDown'是一個'RoutedEvent':如果將'EventName'改爲'MouseDown',那麼當控件可見時,點擊它應該調用'OnLoadedCommand'。這並不能幫助你。您可以使用常規事件處理程序撤退並執行此操作,也可以編寫自己的行爲,以便在依賴項屬性更改事件上執行命令。 –

+0

@EdPlunkett只有在視圖對用戶可見時才能調用BiometricViewModel.cs類的最佳方法是什麼? –

+0

如果它是您的類,請使用DependencyPropertyDescriptor.FromProperty獲取其Visibility屬性的dpd並調用AddValueChanged以添加處理程序。這是最快的。如果你願意,你可以將其推廣爲一種行爲。 –

回答

0

爲什麼不能只需在BiometricViewVisible源setter方法調用命令?

public bool BiometricViewVisible 
{ 
    get 
    { 
     return _biometricViewVisible; 
    } 
    set 
    { 
     _biometricViewVisible = value; 
     OnPropertyChanged(nameof(BiometricViewVisible)); 
     if (value) 
     { 
      OnLoadedCommand.Execute(null); 
     } 
    } 
} 

由於BiometricViewVisibility屬性直接綁定到該源屬性,顯示將變爲可見,只有當此屬性設置爲true,無論如何,這樣你就不需要處理任何事件。