首页 > 解决方案 > 从 ViewModel 调用 CodeBehind 方法

问题描述

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

在我将所有方法移动到 CodeBehind 之后,我无法在我的 ViewModel 中调用这些函数,即使它们位于同一个命名空间中并声明为公共。

我的 ViewModel 中的方法DeleteCar(...)尝试调用ToCarsFile(...)CodeBehind 中的方法:

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

代码隐藏 (.xaml.cs):

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

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

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

标签: c#xamarin.formsmvvmviewmodelcode-behind

解决方案


这里发生了很多事情:

第一个。由于函数是在类中声明的,所以你需要一个类的实例来调用它

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 接线中有一些东西需要改进


推荐阅读