Catel,为什么你将我的模型的属性更新为null?
问题描述:
标题。这发生在我关闭应用程序的那一刻,以及在我的ViewModel的CloseAsync()
节尝试保存附加模型的部分,该部分从SavableModelBase
继承。Catel,为什么你将我的模型的属性更新为null?
我的视图模型:
public ServerTabViewModel(Server server)
{
Argument.IsNotNull(() => server);
Server = server;
}
#region Properties
[Model]
public Server Server
{
get { return GetValue<Server>(ServerProperty); }
set { SetValue(ServerProperty, value); }
}
public static readonly PropertyData ServerProperty = RegisterProperty("Server", typeof(Server));
[ViewModelToModel("Server")]
public string ServerIpAddress
{
get { return GetValue<string>(ServerIpAddressProperty); }
set { SetValue(ServerIpAddressProperty, value); }
}
public static readonly PropertyData ServerIpAddressProperty = RegisterProperty("ServerIpAddress", typeof(string));
...
#endregion
protected override async Task CloseAsync()
{
var server = new Server
{
ServerIpAddress = ServerIpAddress, // ServerIpAddress is null now and model property (Server.ServerIpAddress) too.
...
};
SettingsService.SaveServer(server);
}
我的模型:
public class Server : SavableModelBase<Server>
{
public string ServerIpAddress
{
get { return GetValue<string>(ServerIpAddressProperty); }
set { SetValue(ServerIpAddressProperty, value); }
}
public static readonly PropertyData ServerIpAddressProperty = RegisterProperty("ServerIpAddress", typeof(string));
...
}
在情况下,如果我删除我的视图模型的ServerIpAddress
财产属性[ViewModelToModel("Server")]
,值是可用的。它是可预测的 - 不再由于模型属性。
如何在我关闭应用程序的时刻将模型的属性设置为null?为什么发生这种情况?
答
我没有太多的代码可以通过,但我认为这是由于视图被卸载造成的。这意味着你的虚拟机将被取消(不保存,因为没有明确的保存),你的模型将被重置为重置为原始状态。
您可以通过在Model
属性设置属性更改此行为:
[Model(SupportIEditableObject = false)]
public Server Server
{
...
}
+0
这就解决了问题。和往常一样,谢谢! –
catel,Yü做到这一点? – Will
卡特尔,请不要再伤害我了! –