Tengo un proyecto WPF en Windows 2012 en el que necesito cargar algo de información en el evento Window Loaded. Sin embargo, necesito hacer esto en el Modelo de Vista en lugar de en el CodeBehind. Estoy intentando utilizar el siguiente código:Window Loaded y WPF
En mi xaml:
<interactivity:Interaction.Behaviors>
<behaviors:WindowLoadedBehavior LoadedCommand="{Binding WindowLoadedCommand}" />
</interactivity:Interaction.Behaviors>
en mi opinión Modelo:
private DelegateCommand _WindowLoadedCommand;
public DelegateCommand WindowLoadedCommand
{
get
{
return _WindowLoadedCommand;
}
private set
{
_WindowLoadedCommand = value;
}
}
public ShellViewModel()
{
WindowLoadedCommand = new DelegateCommand(WindowLoadedAction);
}
protected void WindowLoadedAction()
{
...
}
Mi comportamiento adjunto:
public class WindowLoadedBehavior : Behavior<FrameworkElement>
{
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate", Justification = "Dependency Property. Allow public.")]
public static DependencyProperty LoadedCommandProperty = DependencyProperty.Register("LoadedCommand", typeof(ICommand), typeof(WindowLoadedBehavior), new PropertyMetadata(null));
public ICommand LoadedCommand
{
get { return (ICommand)GetValue(LoadedCommandProperty); }
set { SetValue(LoadedCommandProperty, value); }
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Loaded += AssociatedObject_Loaded;
}
protected override void OnDetaching()
{
AssociatedObject.Loaded -= AssociatedObject_Loaded;
base.OnDetaching();
}
private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
if (LoadedCommand != null)
LoadedCommand.Execute(null);
}
}
El OnAttached, AssociatedObject_Loaded y LoadedCommand get son todos disparando, pero el conjunto LoadedCommand no se está disparando y, obviamente, , el comando WindowLoaded no se activa. ¿Alguna pista de lo que puedo hacer para que esto funcione?
¿Alguna razón en particular no está vinculando al comando directamente? –
Según lo que he leído, enlazar el evento Window Loaded directamente no funciona por alguna razón. –