【问题标题】:Bind command to Loaded event of view将命令绑定到视图的 Loaded 事件
【发布时间】:2013-07-29 20:00:35
【问题描述】:

我试图让一个方法在视图完成加载后运行。我试图将命令绑定到视图中的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}">

如何绑定到视图的 Loaded 事件,以便在视图完成加载后运行某些内容?

【问题讨论】:

    标签: wpf xaml commandbinding


    【解决方案1】:

    如果要将命令绑定到Loaded 事件,则应使用“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 位于 Microsoft Expression Blend 软件开发工具包 (SDK) (download link) 中,也可作为 NuGet package 使用。

    【讨论】:

    • +1 秒杀我,虽然我打算走CallMethodAction 行动路线。
    • 感谢您的回答。顺便说一句,不需要下载.dll,因为它已经位于.NET框架程序集中(...\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries\System.Windows.Interactivity.dll
    • 看起来“System.Windows.Interactivity”已经开源了。结帐github.com/microsoft/XamlBehaviorsWpf
    • 此 Nuget 包已被弃用,因为它是旧版且不再维护。下载链接也坏了。
    猜你喜欢
    • 2014-11-08
    • 2011-12-14
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2014-11-06
    • 2018-01-19
    • 2014-12-02
    相关资源
    最近更新 更多