【问题标题】:Call method in ViewModel when a EventTrigger is raised in a View在 View 中引发 EventTrigger 时调用 ViewModel 中的方法
【发布时间】:2012-09-05 13:03:56
【问题描述】:

我想在 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。

【问题讨论】:

    标签: wpf mvvm .net-3.5


    【解决方案1】:

    使用来自 MVVM Light Toolkit 的GalaSoftsEventToCommandhere

            <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 也是工具包的一部分。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 2011-04-09
        • 2021-09-07
        • 2013-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多