我通过IMessenger(MVVM Light Toolkit)创建(如果不存在)新的ViewModel实例,并通过构造函数传递自定义对象,该构造函数是我的MainViewModel的属性。 在这个ViewModel中,我也将它设置为一个Property并使用它,例如用于命令执行方法。但是当我通过Binding触发Command时,自定义Object Property会丢失其值。 我已经调试并看到,对象get的值正确传递,但是从构造函数初始化后它是空的(Not null,只是空属性)。
我的自定义对象
public class CustomObject : ObservableObject
{
public int Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
// etc...
}
我像这样创建ViewModel
public CustomObject CustomObj
{
get { return _customObj; }
set { Set(ref _customObj, value); }
}
_customViewModel = new CustomViewModel(CustomObj, _dataService);
ViewModel
public CustomViewModel(CustomObject obj, IDataService dataService)
{
_dataService = dataService;
// Here it sets correctly the Object
CustomObj = obj;
}
public CustomObject CustomObj
{
get { return _customObj; }
set { Set(ref _customObj, value); }
}
// Even before the Command is triggered, the Object is already empty
public ICommand SomeCommand => new RelayCommand<string>(async s =>
{
var someThing = await _dataService.GetSomeData(CustomObj.Id);
// Stuff...
}
如果重要的话,它们也会在SimpleIoC容器中注册。
可能导致什么结果?