如何从视图模型对视图执行复杂操作?

时间:2014-04-07 19:09:08

标签: wpf mvvm

我正在使用MVVM,我在WPF前端嵌入了一个3D视图。我想对此视图执行操作,例如explode,unexplode和home。我在视图上有函数(例如Explode(amount)Unexplode()Home()),但是如何从视图模型中传达我想要做的事情?

2 个答案:

答案 0 :(得分:1)

如果您不想要第三方框架,我建议您使用Behaviors并在Interactions中执行control

如果不喜欢HighCore

  

查看MVVM Light的Messenger类或PRISM的EventAggregator),或创建附加属性并将您的逻辑放入OnDependencyPropertyChanged(...)

除此之外,我还建议您使用Caliburn Micro' Message.Attach

答案 1 :(得分:1)

您还可以在界面周围包裹3D控件或视图,例如公开这些方法的IMap3D,然后将此界面传递给您的视图模型。

说到GIS /地图,我通常会回避事件。因此,虽然使用EventAggregators或类似的模式可以工作,但是直接访问映射对象会删除不必要的抽象层,这些抽象层通常在这些精细的性能调优练习中派上用场。

public interface IMap3D
{
    void Explode(double amount);
    void UnExplode();
    void Home();
}

public class MapViewModel
{
    private readonly IMap3D  _map3D;
    public MapViewModel(IMap3D map3D)
    {
      _map3D = map3D;
    }

    public ICommand ExplodeCommand
    {
       get
          {
             return new RelayCommand(args => true, o > { // put code to Explode _map3D  here });
          }
    }

    // expose commands for the other 3D view actions
}

请注意,您可能必须启动另一个UI元素来提取您希望xplode 3D视图的数量,除非您使用固定数量进行爆炸。这一切都可以作为命令处理的一部分来完成。