我正在使用MVVM,我在WPF前端嵌入了一个3D视图。我想对此视图执行操作,例如explode,unexplode和home。我在视图上有函数(例如Explode(amount)
,Unexplode()
,Home()
),但是如何从视图模型中传达我想要做的事情?
答案 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视图的数量,除非您使用固定数量进行爆炸。这一切都可以作为命令处理的一部分来完成。