c# - 从ViewModel调用方法背后的代码

标签 c# xamarin.forms mvvm viewmodel code-behind

我试图通过使用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)中不存在”
可能是一个愚蠢的错误,但是我在做什么错呢?

最佳答案

这里发生了很多事情:
1号由于函数是在类中声明的,因此您需要一个类的实例来调用它

public class SomeModel {
    public void ToCarsFile(ObservableCollection<Car> CarsList)
    {
    --SOME CODE FOR DATA PERSISTENCE--
    }
}
所以要称呼它,你需要这样的东西
   var modelObject = new SomeModel();
   modelObject.ToCarsFile(/*data*/);
  • 您的xaml.cs不应该是您的模型。 ViewModel和Model都应独立于 View (xaml.cs类是您的 View 类)

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

    关于c# - 从ViewModel调用方法背后的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64195315/

    相关文章:

    c# - `ICommand.CanExecuteChanged`应该如何实现?

    c# - 解决 WinForms 中的跨线程异常

    sqlite - Xamarin Forms UWP Sqlite 连接,无法加载文件或程序集 SQLite-net

    ios - Xamarin IOS CanPerformAction 不工作

    c# - Xamarin.Forms - 数据更改时 ListView 不更新

    java - Android MVVM/Repository 如何强制 LiveData 从存储库更新?

    c# - 为什么使用命令行构建 VS 安装项目时没有输出?

    c# - 使用 TPL 的 Parallel.ForEach 时跟踪进度

    c# - 如何使用 LINQ to SQL 将单行添加到列表?

    wpf - 绑定(bind)已损坏但没有错误