过去,我已经阅读了很多有关MVVM的内容,但是我还没有完全了解。 我查看了MVVM Light框架,并了解了ServiceLocater绑定View和Viewmodel的模式。 但是我没有发现有关模型与视图模型之间连接的任何帮助。 到目前为止,我知道Viewmodel应该具有一个私有的 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我大家。
我是MVVM的忠实拥护者,但需要澄清如何实现可在多个视图模型中使用的通用方法。
目前,我已经在模型中实现了一种方法,例如EG
接口
public interface ICapture {
void CaptureMethod();
}
这是实现该接口的模型
public class CaptureModel : ICapture {
void CaptureMethod(){ //implement the code to take screen shot }
}
现在,我想在一个或多个视图模型上执行屏幕截图,因此我需要实例化并像这样调用函数。
public ViewModel(){
void TakeScreenShotMethodOrCommandDontCare(){
ICapture captureClass = new CaptureClass();
captureClass.captureMethod
}
}
只是觉得错误必须实例化一个对象的实例才能调用将要截屏的函数。
我想我可以进入视图模型并使用捕获屏幕快照方法,但这将导致具有该功能的所有视图模型之间的代码重复。
也许是静态实用程序类,但肯定会在应用程序上昂贵。
我觉得如果我有一个由基类实现的接口,则我的视图模型可以从该基类继承,并在所需的任何视图模型上实现基实现。
因此,总结一下我的问题,如果您想实现一种捕获屏幕快照的方法,并且您喜欢mvvm,那么您将在哪里实现?
再次感谢所有花时间为我提供帮助的人。
实际上,这是我在MVVM标准中考虑的范围。 在处理MVVM时,我发现最好以这种方式考虑它。 您的视图应该只知道您的ViewModel,而视图模型应该不了解该视图。 ViewModel应该了解您的模型(或多个模型),但是模型应该不了解ViewModel或View。
因此,这里的Model是在ViewModel中实例化的,这是完全有效的! 在这种情况下,您的Model是CaptureClass,并且ViewModel知道它可以从中获取字符串,并将其提供给某些可能要使用它的View。
模型:
class CaptureClass : ICapture
{
public string CaptureShot()
{
string s = DependencyService.Get<ICapture>().CaptureShot();
return s;
}
}
视图模型:
public class CaptureViewModel(){
private _captureText;
public CaptureText
{
get{ return _captureText; }
set{
_captureText = value;
}
}
public CaptureViewModel()
{
CaptureClass cc = new CaptureClass();
_captureText = cc.CaptureShot();
}
}
现在,您要做的就是将其连接到您的视图。 请记住,View知道要绑定到哪个属性,因此只需在XAML后面的代码或XAML中设置您的DataContext,然后像下面这样在XAML中绑定该属性:
<Label Content="{Binding CaptureText}" />
找到了答案,并涉及将服务类注入到我希望在其中使用方法的视图模型中。
链接回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.