我正在尝试在视图加载完成后运行一个方法。我尝试将一个命令绑定到视图中的Loaded
事件,但它无法运行。抛出的内部异常是
"在"System.Windows.Data.Binding"上提供值引发了异常。"行号"14"和行位置"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}">
如何绑定到视图;s的Loaded
事件,以便在视图加载完成后运行某些内容?
如果要将命令绑定到Loaded
事件,则应使用"System.Windows.Interactive"程序集。
<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位于Microsoft Expression Blend软件开发工具包(SDK)(下载链接)中,也可以作为NuGet包提供。
-
安装nuget包Microsoft.Xaml.Behaviors.Wpf(不赞成使用System.Windows.Interactivity)
-
将xmlns添加到窗口/用户控件中。
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
-
将触发器添加到主窗口
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction
CommandParameter="{Binding}"
Command="{Binding MyLoadedCommand}"/>
</b:EventTrigger>
</b:Interaction.Triggers>