2013-04-12 30 views
1

我在.net 4.5中有一個WPF應用程序 在這個應用程序中,我創建了一個名爲「Client」的類。使用new()釋放靜態對象?

在我App.xaml.cs我聲明並實例化一個Client對象:

public partial class App : Application 
    { 

     public static Client obj_myClient; 

     private void Application_Startup_1(object sender, StartupEventArgs e) 
     { 

      obj_myClient = new Client(); 

     } 
    } 

啓動後,我我所有的客戶加載在DataGrid,並且,當我去一個客戶端線(上DataGrid),客戶端屬性被加載到App.obj_myClient(帶綁定)中。

我可以很容易地修改我的客戶端保存在DataBAse中。

我的問題:當我想創建一個新的客戶端,我需要「刷新」我App.objMyClient對象,所以我用:

App.obj_myClient = new Client(); 

這段代碼編譯的權利,並沒有崩潰,但它出現在生成虛假數據綁定我總是奇怪的錯誤(如非火災事件改變了,等...)

我認爲這是相關的:

App.obj_myClient = new Client(); 

,因爲如果我刪除此行,代碼更好。

請問您有什麼建議?

感謝很多:)

最好的問候,

Nixeus

+4

爲什麼你需要這裏的靜態對象 –

+0

我知道我的答案會很糟糕,但.....我不知道!我用綁定的靜態變量,但也許我可以使用非靜態對象! –

回答

1

你不需要客戶端對象爲靜態。將其轉換爲屬性。

而事件的非火災是當你創建一個新的Client對象時,舊對象的訂閱將會丟失,你必須重新創建它們。

+0

非常感謝您的信息!我將刪除靜態! :) –

1

你可以做到以下幾點,以避免靜態變量。但是很難說,如果它能解決你的問題,因爲我們不知道它在做什麼。

public class App : Application 
{ 
    public Client obj_myClient; 
    private void Application_Startup_1(object sender, StartupEventArgs e) 
    { 
     obj_myClient = new Client(); 
    } 
} 

使用

private void SomeMethod() 
{ 
    var someValue = ((App)Application.Current).obj_myClient.WhatEverMethod(); 
} 
+0

感謝您的解釋:) –