Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM中控件的调用方法_C#_Wpf_Mvvm - Fatal编程技术网

C# MVVM中控件的调用方法

C# MVVM中控件的调用方法,c#,wpf,mvvm,C#,Wpf,Mvvm,我目前正在使用,希望将地图的当前视口绑定到视图模型上的属性。但是,视图端口(表示为区段)没有setter,尽管它是一个依赖属性 为了设置视口,我需要调用控件上的方法。但如何从视图模型中实现这一点?我已经在这里找到了类似的问题,但是大多数问题都是用视图模型回答的,而视图模型不应该知道视图。我同意这一点,但不幸的是,我无法改变这样一个事实,即专有控件上属性的setter与我可以绑定并从中读取值的实际属性是不同的方法。有许多方法可以完成这项工作,它们可能被认为是MVVM友好的。 我建议您将ArcGIS

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


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

有许多方法可以完成这项工作,它们可能被认为是MVVM友好的。 我建议您将ArcGIS视图包装在一个您完全可以控制的自定义控件中。通过这种方式,您可以公开所需的依赖项属性,并在自定义控件中处理它们的设置器


我几乎每次使用第三方组件时都会使用这种方法,这样我可以使组件与我的其他代码松散耦合,并且可以很容易地替换它们。

有很多方法可以完成这项工作,它们可能被认为是MVVM友好的。 我建议您将ArcGIS视图包装在一个您完全可以控制的自定义控件中。通过这种方式,您可以公开所需的依赖项属性,并在自定义控件中处理它们的设置器


我几乎每次使用第三方组件时都会使用这种方法,这样我可以使该组件与我的其他代码松散耦合,并且可以很容易地替换它们。

您可以使用附加属性推送VM请求任何侦听视图以转到某个视点。我在这里的示例中使用了:

在虚拟机中,您只需为一个视点引发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}" />

您可以使用附加属性推送VM请求任何侦听视图以转到某个视点。我在这里的示例中使用了:

在虚拟机中,您只需为一个视点引发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}" />


我想知道为什么我没有想到这一点。这是一个非常好的主意,谢谢。通常认为在代码隐藏中处理视图事件是可以的,它会立即将非UI特定的位转发到您的viewmodel,或者您可以使用EventToCommand跳过该位。我想知道为什么我没有想到这一点。这是一个非常好的主意,谢谢。通常认为用代码隐藏处理视图事件是可以的,它会立即将非UI特定的位转发到您的viewmodel,或者您可以使用EventToCommand跳过该位。