【发布时间】:2019-07-22 10:31:26
【问题描述】:
我想从另一个 ViewModel 向 ObservableCollection 添加一个元素...问题是当通过单例生成该 ViewModel 的实例时,我收到构造函数接收参数的错误
没有给出与所需形式相对应的参数 参数 'centroLegado' 的 'GenerarRetiroCentroViewModel.GenerarRetiroCentroViewModel(CentroGeneracion)'
如何实现单例以便可以从另一个 ViewModel 调用它?
我附上了具有可观察集合和构造函数的 ViewModel 的代码..
通用RetiroCentroViewModel.CS:
#region Constructor
public GenerarRetiroCentroViewModel(CentroGeneracion centroLegado)
{
instance = this;
ListaResiduosTemporales = new ObservableCollection<ResiduosTemporal>();
centroSeleccionado = centroLegado;
}
#endregion
#region Singleton
static GenerarRetiroCentroViewModel instance;
public static GenerarRetiroCentroViewModel GetInstance()
{
if (instance == null)
{
return new GenerarRetiroCentroViewModel();
}
return instance;
}
#endregion
我附上了我“希望”如何从另一个 ViewModel (SelectResiduoViewModel.CS) 调用我的 ObservableCollection 的代码
SeleccionarResiduoViewModel.CS:
var objeto = new ResiduosTemporal
{
IdResiduo = IdResiduo,
NombreResiduo = NombreResiduo,
IdEstimado = IdUnidad,
NombreEstimado = NombreUnidad,
IdContenedor = IdContenedor,
NombreContenedor = NombreContenedor,
};
var generarRetiroCentroViewModel = GenerarRetiroCentroViewModel.GetInstance();
generarRetiroViewModel.ListaResiduosTemporales.Add(objecto);
如何添加 Mode 对象来填充另一个 ViewModel 中的控件?单例可以做到这一点吗?我该怎么做?对我有什么帮助吗?
【问题讨论】:
-
关于该错误,您只需正确填写参数即可。您期待
CentroGeneracion,但您没有传递任何参数。如果您不需要它,请创建第二个空构造函数。此外,您永远不会分配instance属性,这意味着如果您调用该函数,您将始终返回一个 new 单例实例。注意:您的实现不是线程安全的。如果您不需要线程安全的线程安全的,那么您就可以使用了,否则您应该考虑重写它。 -
另一方面,如果您仍然可以这样做,请考虑为所有内容仅使用英文名称 - 它很快就会变得混乱,然后您的课程更大,30%是您的母语,其余的是英文.另外,一段时间后,我发现用英语命名事物比用我自己的语言命名要容易得多
-
你不建议回答这个问题吗?不鼓励?或者子进程的实现非常不稳定? @肖恩
-
@BodegaPangal 我其实很想但是忘记了¯_(ツ)_/¯
标签: c# xamarin mvvm xamarin.forms viewmodel