在MVVM中调用控制方法

时间:2016-10-13 05:49:30

标签: c# wpf mvvm

我目前正在使用ArcGIS Runtime SDK .NET,我希望将地图的当前视口绑定到我的视图模型上的属性。但是,视图端口(表示为Extent)没有setter,尽管它是依赖属性。

为了设置视口,我需要在控件上调用一个方法。但是我如何从视图模型中做到这一点?我已经在SO上找到了类似的问题,但是大多数问题都是用回答的。视图模型不应该知道视图。我同意这一点,但不幸的是我不能改变这个事实专有控件上属性的setter是一种不同于我可以绑定的实际属性并从中读取值的方法。

2 个答案:

答案 0 :(得分:3)

有许多方法可以将这项工作视为MVVM友好的。 我建议的是您将ArcGIS视图包装在您可以完全控制的自定义控件中。这样,您可以公开所需的依赖项属性并在自定义控件中处理其setter。

我几乎每次使用第三方组件时都会使用此方法,这样我就可以将组件与其他代码松散耦合,并且可以轻松替换它们。

答案 1 :(得分:0)

您可以使用附加属性来推送VM请求任何侦听视图以转到某个视点。我在我的样本中使用它:

https://github.com/Esri/arcgis-runtime-demos-dotnet/blob/master/src/TurnByTurn/RoutingSample.Shared/CommandBinder.cs

在您的虚拟机中,您只需为视点提升INPC:

public Viewpoint ViewpointRequested
{
    get { return m_ViewpointRequested; }
    private set
    {
        m_ViewpointRequested = value;
        RaisePropertyChanged("ViewpointRequested");
    }
}

然后最后将它绑定到MapView上的附加属性:

<esri:MapView Map="{Binding Map}"
             local:CommandBinder.RequestView="{Binding ViewpointRequested}" />