Mvvm 如何将视图传递给我的ViewModel,以便I*服务可以使用该视图执行某些操作

Mvvm 如何将视图传递给我的ViewModel,以便I*服务可以使用该视图执行某些操作,mvvm,mvvmcross,Mvvm,Mvvmcross,是一个非常好的显示跨平台警报的插件 但对于这个问题,我们是否可以假设它不能在其他平台上使用UIAlertView或其他顶级MessageBox类型的调用,但需要在屏幕的给定部分显示消息,即在IPhone上,您需要为插件提供UIView,它将使用该插件在其中显示消息 那么,您将如何设置它,以便ViewModel知道将哪个视图用作其显示容器 作为一个具体的例子,如果我想要一个错误服务,那么- public interface IErrorPFService { void Show();

是一个非常好的显示跨平台警报的插件

但对于这个问题,我们是否可以假设它不能在其他平台上使用UIAlertView或其他顶级MessageBox类型的调用,但需要在屏幕的给定部分显示消息,即在IPhone上,您需要为插件提供UIView,它将使用该插件在其中显示消息

那么,您将如何设置它,以便ViewModel知道将哪个视图用作其显示容器

作为一个具体的例子,如果我想要一个错误服务,那么-

public interface IErrorPFService
{
    void Show();
    void Hide();
    void SetErrors(List<Error> errors);
}
在我看来


或者这与Mvvm实践的耦合不正确?

我希望ViewModel自己订阅ErrorService

当接收到消息时,它将在集合中公开该消息,并且视图将绑定到该集合


这样,视图对于服务来说是未知的,并且ViewModel有可能影响视图,这与您的解决方案相反。

我希望ViewModel能够订阅ErrorService

当接收到消息时,它将在集合中公开该消息,并且视图将绑定到该集合


这样,视图对于服务来说是未知的,并且ViewModel有可能影响与您的解决方案相反的视图。

如果您能为所描述的场景提供一个示例,这会有所帮助

有时,您希望以视觉方式显示某些内容的方式可能不是最佳方式,因此,如果可能的话,您可能会找到一种不同且更简单的方式,这样您就不必为所描述的内容找到解决方案

一般来说,我总是尽我所能避免从一个视图模型到另一个视图实际传递“视图”或其抽象的想法。此外,从跨平台的角度来看,在UI交互方面,情况可能会大不相同。您可能会发现,由于UI的工作方式与您预期的不同,所以事情变得复杂

但让我们尝试另一种观点:

在任何给定点,视图都知道它显示的是什么数据\功能。因此,当您通过服务、属性更改、事件等从视图模型调用用户交互操作时,视图应该“预期”它

例如,特定于平台的用户交互实现能够获取当前显示的俯视图,并以特定于平台的方式或基于关系对其进行交互。在您的示例中,消息框可以显示在顶层视图的特定子视图中


在高级场景中,我想您可以尝试为此创建一个跨平台的方法,但是您应该尝试平衡您想要为此创建的所有抽象。把这当作一个计划来考虑。。。Z.如果可能的话。同样,举个例子可能会有所帮助。

如果你能为你描述的场景举个例子,那会有所帮助

有时,您希望以视觉方式显示某些内容的方式可能不是最佳方式,因此,如果可能的话,您可能会找到一种不同且更简单的方式,这样您就不必为所描述的内容找到解决方案

一般来说,我总是尽我所能避免从一个视图模型到另一个视图实际传递“视图”或其抽象的想法。此外,从跨平台的角度来看,在UI交互方面,情况可能会大不相同。您可能会发现,由于UI的工作方式与您预期的不同,所以事情变得复杂

但让我们尝试另一种观点:

在任何给定点,视图都知道它显示的是什么数据\功能。因此,当您通过服务、属性更改、事件等从视图模型调用用户交互操作时,视图应该“预期”它

例如,特定于平台的用户交互实现能够获取当前显示的俯视图,并以特定于平台的方式或基于关系对其进行交互。在您的示例中,消息框可以显示在顶层视图的特定子视图中


在高级场景中,我想您可以尝试为此创建一个跨平台的方法,但是您应该尝试平衡您想要为此创建的所有抽象。把这当作一个计划来考虑。。。Z.如果可能的话。同样,举个例子可能会有所帮助。

谢谢,我可以通过在ViewModel上放置一些属性来了解如何做到这一点,比如ErrorsList、SwarthRors、HideErrors,然后在VM中设置它们,并在UI中对它们做出反应。如果大多数屏幕都使用它们,我可以将它们放在BaseViewModel中。。。,但我只是想理解一种方式,明确地说VM支持错误信息的显示,因此是IErrorPFService,然后我想确保视图能够根据平台处理这些错误。感觉插件就像是resol之后用户交互的最终结果
查看问题!我将离开并继续进行一些代码/澄清问题,因为这看起来不像是一个明显的回答。。它与在MVVM中显示对话框在同一个区域,关于这一点以及如何解耦有很多文献。对于视图模型,您给出的示例名称“ShowsErrors”“HideError”对我来说并不合适。我想再次询问您是否有一个您正在尝试做的示例。我了解您来自何方,将查看您描述的接吻方法,并获得更多信息。谢谢,我可以通过在ViewModel上放置一些属性来了解如何做到这一点,如ErrorsList、淋浴Rors、,隐藏错误,然后在VM中设置它们,并在UI中对它们作出反应。如果大多数屏幕使用它们,我可以将它们放入BaseViewModel中。。。,但我只是想理解一种方式,明确地说VM支持错误信息的显示,因此是IErrorPFService,然后我想确保视图能够根据平台处理这些错误。在解决了视图问题后,感觉插件就像用户交互一样是最终的结果!我将离开并继续进行一些代码/澄清问题,因为这看起来不像是一个明显的回答。。它与在MVVM中显示对话框在同一个区域,关于这一点以及如何解耦有很多文献。对于视图模型,您给出的示例名称“ShowsErrors”“HideError”对我来说并不合适。我想再次问你是否有你想要做的事情的例子。我知道你来自哪里,我会看看你描述的接吻方法,然后带着更多的信息回来。谢谢你的评论Erno,考虑上面的下一步。谢谢你的评论Erno,考虑上面的下一步。
MyViewModel.ErrorPFService = new ErrorPFService(View);