繁体   English   中英

C#MVVM,了解何时不制作模型

C# MVVM, Understanding when not to make a model

提示:本站收集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,那么您将在哪里实现?

再次感谢所有花时间为我提供帮助的人。

2 个回复

实际上,这是我在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}" />

找到了答案,并涉及将服务类注入到我希望在其中使用方法的视图模型中。

链接回答。

https://softwareengineering.stackexchange.com/questions/380036/c-mvvm-understanding-when-not-to-make-a-model

1 C#mvvm如何将模型传递给viewmodel

过去,我已经阅读了很多有关MVVM的内容,但是我还没有完全了解。 我查看了MVVM Light框架,并了解了ServiceLocater绑定View和Viewmodel的模式。 但是我没有发现有关模型与视图模型之间连接的任何帮助。 到目前为止,我知道Viewmodel应该具有一个私有的 ...

2016-05-25 13:11:24 1 754   c#/ mvvm
2 C# MVVM 模型图消息中介器还是 INotifyPropertyChanged?

我正在开发一个 C# MVVM WPF 应用程序,并且在决定是否应该使用消息中介模式或简单的 INotifyPropertyChanged 来处理我的 UI“实时”模型更改通知时遇到了问题。 特别是问题在于我的模型表示一个包含许多“实时”对象的图形,这些对象都具有不同的视图模型在某些时候会对更改感兴 ...

3 C# MVVM 索引集合

我有一个模型 RecipeType,它包含一个 ObservableCollection 组件: 我想列出 2 个食谱,每个食谱都指向两个不同的组件之一。 如何为这些参数设置 getter、setter? 我怎么知道更新哪一个? 谢谢! ...

4 C#MVVM计算总计

我需要根据选定的价格和数量计算交易价值。 怎么能 以下是我的ViewModel: ViewModelBase继承INotifyPropertyChanged并包含SetField() 以下是贸易类: 我知道由于设计我的TradeValue只计算一次(当它第一次请求时 ...

5 c#mvvm适当的事件处理

我已经在WPF窗口中实现了MVVM模式。 我有一个子窗口,我通过以下方式调用它(从另一个ViewModel): 在frm_StrediskaViewModel下,我通过以下方式挂接到Window.Closing事件: 我不确定的是,当我关闭此SubWindow时,如果我的Win ...

6 C#MVVM:添加新的ViewModel(严格的非暴露模型设计)

我一直在使用C#中的MVVM应用程序,但是在处理ViewModel我的View摘要集合时会遇到一些问题。 具体而言,它们都倾向于与作为ViewModel的私有成员的Model的问题相关。 一个例子是创建新的ViewModel(根据View的要求)。 对于某些序言(尽管您可能不需要这些来 ...

8 如何在C#MVVM中绑定一对多关系

我一直在开发Windows Forms应用程序,并且是使用MVVMLight Toolkit和WPF的新手。 我的模型如下: 患者 Id,FirstName,LastName等... 测试结果 ID,分数,日期, PatientId等...... 每位患者 ...

9 C#MVVM:将单选按钮绑定到布尔属性

我是编程新手,目前正在学习C#和MVVM模式。 我需要为ChiliPlants大学编写一个数据库工具。 在那里,您应该能够将新对象添加到ObservableCollection。 要将新项目添加到此ObservableCollection,将打开一个新窗口。 看起来像这样: Wi ...

10 C#MVVM如何将命令添加到TextBlock

我正在尝试向TextBlock添加命令,但还没有成功。 我尝试了以下操作: 在XAML中,我有一个ItemsControl ,在其中添加了TextBlocks : 如您所见,我试图像通常那样添加MouseBinding ,但是由于我是通过MainWindowViewModel添加 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM