Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bind command to Loaded event of view

I am trying to get a method to run when a view has finished loading. I have tried to bind a command to the Loaded event in the view but it fails to run. The inner exception that is thrown is

'Provide value on 'System.Windows.Data.Binding' threw an exception.' Line number '14' and line position '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}"> 

How am I able to bind to a view’s Loaded event so I can run something after the view has finished loading?

like image 778
scott lafoy Avatar asked Jul 29 '13 20:07

scott lafoy


1 Answers

If you want to bind command to the Loaded event, you should use the "System.Windows.Interactivity" assembly.

<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 is in Microsoft Expression Blend Software Development Kit (SDK) (download link) and also available as a NuGet package.

like image 72
kmatyaszek Avatar answered Oct 03 '22 08:10

kmatyaszek