2016-10-03 40 views
0

標題。這發生在我關閉應用程序的那一刻,以及在我的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

卡特爾,請不要再傷害我了! –

回答

0

我沒有太多的代碼可以通過,但我認爲這是由於視圖被卸載造成的。這意味着你的虛擬機將被取消(不保存,因爲沒有明確的保存),你的模型將被重置爲重置爲原始狀態。

您可以通過在Model屬性設置屬性更改此行爲:

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

這就解決了問題。和往常一樣,謝謝! –

相關問題