Catel,为什么要将我模型的属性更新为空?
Catel, why you update the properties of my model to null?
主题。这发生在我关闭应用程序的那一刻,并且在我的 ViewModel 的 CloseAsync()
部分试图保存附加模型,该模型继承自 SavableModelBase
.
我的视图模型:
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));
...
}
以防万一,如果我删除 ViewModel ServerIpAddress
属性 上的属性 [ViewModelToModel("Server")]
,则值可用。它是可预测的 - 不再因模型 属性 而到期。
如何让模型在我关闭应用程序时不将其属性设置为空?为什么会这样?
我没有太多代码可以参考,但我认为这是由正在卸载的视图引起的。这意味着您的虚拟机将被取消(因为没有明确的保存而不会保存)并且您的模型将被重置为重置为原始状态。
您可以通过在 Model
属性上设置 属性 来更改此行为:
[Model(SupportIEditableObject = false)]
public Server Server
{
...
}
主题。这发生在我关闭应用程序的那一刻,并且在我的 ViewModel 的 CloseAsync()
部分试图保存附加模型,该模型继承自 SavableModelBase
.
我的视图模型:
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));
...
}
以防万一,如果我删除 ViewModel ServerIpAddress
属性 上的属性 [ViewModelToModel("Server")]
,则值可用。它是可预测的 - 不再因模型 属性 而到期。
如何让模型在我关闭应用程序时不将其属性设置为空?为什么会这样?
我没有太多代码可以参考,但我认为这是由正在卸载的视图引起的。这意味着您的虚拟机将被取消(因为没有明确的保存而不会保存)并且您的模型将被重置为重置为原始状态。
您可以通过在 Model
属性上设置 属性 来更改此行为:
[Model(SupportIEditableObject = false)]
public Server Server
{
...
}