c# - 从 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)”
可能是一个愚蠢的错误,但我做错了什么?
解决方案
这里发生了很多事情:
第一个。由于函数是在类中声明的,所以你需要一个类的实例来调用它
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 都应该独立于视图(xaml.cs 类是您的视图类)
所以你的 MVVM 接线中有一些东西需要改进
推荐阅读
- postgresql - 应该使用哪种数据类型来存储对 Postgres 的 GeoJSON 响应
- firebase - Firebase Cloud Messaging:使用云功能向特定用户发送通知
- html - 使用浏览器打印 HTML 页面时如何添加 PDF 元数据?
- c++ - Boost Process `system` 函数中的错误处理
- python - Linearmodels FamaMacBeth 'list' 参数必须没有负面元素
- c# - 过滤和分页在 .NET Core 2.1 EF 中不起作用
- date - 从斜线之间的日期中提取文本
- playframework - 路径可绑定日期播放框架
- java - 用户关闭应用程序时服务不会停止
- java - Linux下使用ProcessBuilder调用Graphviz