【发布时间】:2021-01-19 12:48:34
【问题描述】:
我正在尝试通过使用 Xamarin.Forms 编写一个小应用程序来学习 MVVM 设计模式。 我保护了 Android 文件系统 (XML) 中的所有数据以使其持久化。但目前所有保护数据的方法都在 ViewModel 中,我正在尝试将这些方法移至 CodeBehind(模型)以尊重 MVVM 设计模式。
将所有方法移至 CodeBehind 后,我无法调用 ViewModel 中的函数,即使它们位于同一命名空间中并声明为公共。
我的 ViewModel 中的方法 DeleteCar(...) 尝试调用 CodeBehind 中的方法 ToCarsFile(...):
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)”
可能是一个愚蠢的错误,但我做错了什么?
【问题讨论】:
-
为什么您认为将代码移动到代码隐藏是 MVVM 概念的一部分?保存数据当然是您可以在 VM 中执行的操作。您的 VM 不应该在后面调用您的代码的方法,这会破坏 MVVM 主体。最后,您需要一个类实例的引用才能使用它的公共方法。这是基本的 C#
-
@Jason 谢谢你的回答。当我发布这个问题时,我犯了一个错误。我有一个实例......我会更新它。关于 MVVM 概念:我认为 CodeBehind 和模型是相同的,因为模型负责应用程序数据,所以我想将代码的那部分移动到 CodeBehind。似乎我对 MVVM 的理解是我的错误:) 谢谢
-
后面的代码是视图的一部分。
标签: c# xamarin.forms mvvm viewmodel code-behind