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跳过该位。