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
{
    ...
}