从ViewModel调用CodeBehind方法

问题描述

我正在尝试通过使用Xamarin.Forms编码一个小应用程序来学习MVVM设计模式。 我保护Android文件系统(XML)中的所有数据,使其持久化。但是目前,所有保护数据的方法都在viewmodel中,我正在尝试将这些方法移至CodeBehind(模型)以遵守MVVM设计模式。

将所有方法移至CodeBehind之后,即使它们位于同一名称空间中并声明为public,也无法在viewmodel中调用这些函数

viewmodel中的方法DeleteCar(...)尝试调用CodeBehind中的方法ToCarsFile(...)

public void DeleteCar(object sender)
{
    AllCars.Remove(sender as Car);
    ToCarsFile(AllCars); //This is underlined in red
}

CodeBehind(.xaml.cs):

public void ToCarsFile(ObservableCollection<Car> CarsList)
{
    --SOME CODE FOR DATA PERSISTENCE--
}

我收到错误消息“错误CS0103:名称'ToCarsFile'在当前上下文(CS0103)(ProjectCars)中不存在”

可能是一个愚蠢的错误,但是我在做什么错了?

解决方法

这里发生了很多事情:

1st。由于函数是在类中声明的,因此您需要一个类的实例来调用它

public class SomeModel {
    public void ToCarsFile(ObservableCollection<Car> CarsList)
    {
    --SOME CODE FOR DATA PERSISTENCE--
    }
}

所以要调用它,您需要像这样的

   var modelObject = new SomeModel();
   modelObject.ToCarsFile(/*data*/);
  1. 您的xaml.cs不应该是您的模型。 ViewModel和Model都应独立于视图(xaml.cs类是您的视图类)

因此,您的MVVM接线中有一些需要改进的地方

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...