从 ViewModel 调用代码隐藏方法
Call a CodeBehind Method from ViewModel
我正在尝试通过使用 Xamarin.Forms 编写一个小应用程序来学习 MVVM 设计模式。
我保护 Android 文件系统 (XML) 中的所有数据以使其持久化。但目前所有保护数据的方法都在 ViewModel 中,我正试图将这些方法移动到 CodeBehind(模型)以尊重 MVVM 设计模式。
在我将所有方法移至 CodeBehind 后,我无法调用我的 ViewModel 中的函数,即使它们位于同一命名空间内并声明为 public。
我的 ViewModel 中的方法 DeleteCar(...)
试图调用代码隐藏中的方法 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) 中不存在”
可能是个愚蠢的错误,但我做错了什么?
这里发生了很多事情:
第一。由于函数是在 classes 中声明的,因此您需要一个 class 的实例来调用它
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 class 是你的视图 class)
所以您的 MVVM 布线中有些东西需要改进
我正在尝试通过使用 Xamarin.Forms 编写一个小应用程序来学习 MVVM 设计模式。 我保护 Android 文件系统 (XML) 中的所有数据以使其持久化。但目前所有保护数据的方法都在 ViewModel 中,我正试图将这些方法移动到 CodeBehind(模型)以尊重 MVVM 设计模式。
在我将所有方法移至 CodeBehind 后,我无法调用我的 ViewModel 中的函数,即使它们位于同一命名空间内并声明为 public。
我的 ViewModel 中的方法 DeleteCar(...)
试图调用代码隐藏中的方法 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) 中不存在”
可能是个愚蠢的错误,但我做错了什么?
这里发生了很多事情:
第一。由于函数是在 classes 中声明的,因此您需要一个 class 的实例来调用它
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 class 是你的视图 class)
所以您的 MVVM 布线中有些东西需要改进