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?为什么发生这种情况?

+0

catel,Yü做到这一点? – Will

+0

卡特尔,请不要再伤害我了! –

我没有太多的代码可以通过,但我认为这是由于视图被卸载造成的。这意味着你的虚拟机将被取消(不保存,因为没有明确的保存),你的模型将被重置为重置为原始状态。

您可以通过在Model属性设置属性更改此行为:

[Model(SupportIEditableObject = false)] 
public Server Server 
{ 
    ... 
} 
+0

这就解决了问题。和往常一样,谢谢! –