在View中引发EventTrigger时,在ViewModel中调用方法

时间:2012-09-12 13:33:23

标签: wpf mvvm .net-3.5

我想在View中引发EventTrigger时调用ViewModel的方法。 我想做类似的事情,但在我的xaml代码中 MVVM

public partial class MyView : UserControl
{
    public MyView()
    {
        InitializeComponent();
        this.Loaded +=new System.Windows.RoutedEventHandler(ViewLoaded);
    }

    private void ViewLoaded(object sender, RoutedEventArgs e)
    {
        ((MyViewModel)this.DataContext).BeginWork();
    }
}

我的应用程序是使用WPF 3.5构建的,我无法使用Blend SKD。

2 个答案:

答案 0 :(得分:0)

创建类型为ICommand的DependencyProperty,例如将其称为“BeginWorkCommand”。在viewmodel旁边创建一个新类,或使用DelegateCommand在viewmodel中直接使用它。最后将此viewmodel命令绑定到您创建的依赖项属性。

答案 1 :(得分:0)

使用MVVM Light Toolkit here中的GalaSofts EventToCommand

        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Loaded">
                <WPFActions:EventToCommand Command="{Binding LoadedCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>

其中LoadedCommand是在ViewModel中实现的命令

public class MyViewModel
{
    private readonly ICommand loadedCommand;

    public ICommand LoadedCommand { get { return loadedCommand; } }

    public MyViewModel()
    {
        loadedCommand = new RelayCommand(myLoadedHandler);
    }

    //...
}

RelayCommand也是该工具包的一部分。