2013-07-29 5 views
20

Sto cercando di ottenere un metodo da eseguire al termine del caricamento di una vista. Ho provato a associare un comando all'evento Loaded nella vista ma non riesce a funzionare. L'eccezione interna generata èComando di binding a evento di visualizzazione caricato

'Fornire valore su' System.Windows.Data.Binding 'ha generato un'eccezione.' numero Line '14' e la posizione di linea '14'

<UserControl x:Class="Components.Map.MapView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:map="clr-namespace:Components.Map" 
      xmlns:controls="clr-namespace:Windows.Controls;assembly=Windows.Controls" 
      xmlns:ValidationRules="clr-namespace:Windows.Controls.ValidationRules;assembly=Windows.Controls" 
      xmlns:directGraphicsControl="clr-namespace:Windows.DirectGraphicsControl;assembly=Windows.DirectGraphicsControl" 
      xmlns:colorBar="clr-namespace:Components.Common.ColorBar;assembly=Components.Common" 
      xmlns:RefinedRibbonControls="clr-namespace:Components.Common.Controls.RefinedRibbonControls;assembly=Components.Common" 
      xmlns:UserControls="clr-namespace:Components.Common.UserControls;assembly=Components.Common" 
      xmlns:map1="clr-namespace:Models.Map;assembly=Models.Map" 
      xmlns:utilities="clr-namespace:Windows.Utilities;assembly=Windows.Utilities" 
      xmlns:system="clr-namespace:System;assembly=mscorlib" 
      Loaded="{Binding Path=MapControlViewModel.MapLoadedCommand}"> 

Come sono io in grado di legarsi ad una vista ’ s Loaded evento così posso correre qualcosa dopo la vista ha terminato il caricamento?

risposta

34

Se si desidera associare il comando all'evento Loaded, è necessario utilizzare l'assembly "System.Windows.Interactivity".

<UserControl x:Class="Components.Map.MapView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:map="clr-namespace:Components.Map" 
      xmlns:controls="clr-namespace:Windows.Controls;assembly=Windows.Controls" 
      xmlns:ValidationRules="clr-namespace:Windows.Controls.ValidationRules;assembly=Windows.Controls" 
      xmlns:directGraphicsControl="clr-namespace:Windows.DirectGraphicsControl;assembly=Windows.DirectGraphicsControl" 
      xmlns:colorBar="clr-namespace:Components.Common.ColorBar;assembly=Components.Common" 
      xmlns:RefinedRibbonControls="clr-namespace:Components.Common.Controls.RefinedRibbonControls;assembly=Components.Common" 
      xmlns:UserControls="clr-namespace:Components.Common.UserControls;assembly=Components.Common" 
      xmlns:map1="clr-namespace:Models.Map;assembly=Models.Map" 
      xmlns:utilities="clr-namespace:Windows.Utilities;assembly=Windows.Utilities" 
      xmlns:system="clr-namespace:System;assembly=mscorlib" 
      xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"> 

      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="Loaded"> 
        <i:InvokeCommandAction Command="{Binding LoadedCommand}" /> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 

</UserControl> 

System.Windows.Interactivity.dll è in Kit di sviluppo Microsoft Expression Blend software (SDK) (download link).

+1

+1 Picchiami per secondi, anche se stavo per passare al percorso di azione 'CallMethodAction'. –

+3

Grazie per la risposta. A proposito, non è necessario scaricare il file .dll perché è già presente negli assembly framework .NET ('... \ Microsoft SDK \ Expression \ Blend \ .NETFramework \ v4.5 \ Libraries \ System.Windows.Interactivity .dll') – Eido95

Problemi correlati