MVVM 将 EventArgs 作为命令参数传递 [英] MVVM Passing EventArgs As Command Parameter
问题描述
我正在使用 Microsoft Expression Blend 4
我有一个浏览器 ..,
I'm using Microsoft Expression Blend 4
I have a Browser ..,
[ XAML ] ConnectionView背后的空代码"
[ XAML ] ConnectionView " Empty Code Behind "
<WebBrowser local:AttachedProperties.BrowserSource="{Binding Source}">
<i:Interaction.Triggers>
<i:EventTrigger>
<i:InvokeCommandAction Command="{Binding LoadedEvent}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Navigated">
<i:InvokeCommandAction Command="{Binding NavigatedEvent}" CommandParameter="??????"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</WebBrowser>
[ C# ] AttachedProperties 类
public static class AttachedProperties
{
public static readonly DependencyProperty BrowserSourceProperty = DependencyProperty . RegisterAttached ( "BrowserSource" , typeof ( string ) , typeof ( AttachedProperties ) , new UIPropertyMetadata ( null , BrowserSourcePropertyChanged ) );
public static string GetBrowserSource ( DependencyObject _DependencyObject )
{
return ( string ) _DependencyObject . GetValue ( BrowserSourceProperty );
}
public static void SetBrowserSource ( DependencyObject _DependencyObject , string Value )
{
_DependencyObject . SetValue ( BrowserSourceProperty , Value );
}
public static void BrowserSourcePropertyChanged ( DependencyObject _DependencyObject , DependencyPropertyChangedEventArgs _DependencyPropertyChangedEventArgs )
{
WebBrowser _WebBrowser = _DependencyObject as WebBrowser;
if ( _WebBrowser != null )
{
string URL = _DependencyPropertyChangedEventArgs . NewValue as string;
_WebBrowser . Source = URL != null ? new Uri ( URL ) : null;
}
}
}
[ C# ] ConnectionViewModel 类
public class ConnectionViewModel : ViewModelBase
{
public string Source
{
get { return Get<string> ( "Source" ); }
set { Set ( "Source" , value ); }
}
public void Execute_ExitCommand ( )
{
Application . Current . Shutdown ( );
}
public void Execute_LoadedEvent ( )
{
MessageBox . Show ( "___Execute_LoadedEvent___" );
Source = ...... ;
}
public void Execute_NavigatedEvent ( )
{
MessageBox . Show ( "___Execute_NavigatedEvent___" );
}
}
[ C# ] ViewModelBase 类 这里
最后:
绑定命令效果很好,并且显示了 MessageBoxes
Finally :
Binding with commands works well and MessageBoxes shown
我的问题:
发生导航事件时如何将 NavigationEventArgs 作为命令参数传递?
推荐答案
它不容易被支持.这是 一篇文章,其中包含有关如何将 EventArgs 作为命令参数传递的说明.
It's not easily supported. Here's an article with instructions on how to pass EventArgs as command parameters.
您可能想考虑使用 MVVMLight - 它直接在命令中支持 EventArgs;您的情况将如下所示:
You might want to look into using MVVMLight - it supports EventArgs in command directly; your situation would look something like this:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Navigated">
<cmd:EventToCommand Command="{Binding NavigatedEvent}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
这篇关于MVVM 将 EventArgs 作为命令参数传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!