2012-04-17 48 views
0

目前,我在Windows Phone中使用了本地數據庫中的Silverlight應用程序。基本上生成一個listBox來顯示存儲的'clients'的當前列表,這可以正常工作。現在我希望能夠讓用戶編輯客戶的詳細信息之一。爲此,我創建了一個新頁面,只要用戶點擊主頁面上的按鈕就會加載該頁面。事件如下:從windows中的其他類中檢索對象

public ClientItem selectedClient; 

public void Edit_Click(object sender, EventArgs e) 
    { 
     if (clientItemsListBox.SelectedItem != null) 
     { 
      selectedClient = clientItemsListBox.SelectedItem as ClientItem; 

      NavigationService.Navigate(new Uri("/EditClient.xaml", UriKind.Relative)); 
     } 
    } 

以上只是檢查選擇哪個客戶端,將其存儲爲selectedClient並導航到EditClient頁面。

在EditClient類我有以下方法:

public void saveButton_Click(object sender, RoutedEventArgs e) 
    { 
     //Get the client that is selected 

     ClientItem clientForDelete = mainPage.selectedClient; 
     mainPage.ClientItems.Remove(clientForDelete); 
     mainPage.clientDB.ClientItems.DeleteOnSubmit(clientForDelete); 

     // Create a new client based on the text boxes 
     ClientItem newClient = new ClientItem { ClientName = newClientNameTextBox.Text, ClientSurname = newClientSurnameTextBox.Text, ClientCompany = newClientCompanyTextBox.Text, ClientPhone = int.Parse(newClientPhoneTextBox.Text) }; 

     // Add new client to the database 
     mainPage.clientDB.ClientItems.InsertOnSubmit(newClient); 

     // Sava database changes 
     mainPage.clientDB.SubmitChanges(); 

     // Go to main screen 
     NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 
    } 

當我運行這段代碼,我得到一個NullReferenceException當它試圖執行:

mainPage.ClientItems.Remove(clientForDelete); 

這是因爲selectedClient爲空。我怎樣才能從其他類的對象,而不是爲空?因爲我不想從主類中刪除項目,以防用戶決定取消操作。另外,我想在加載頁面時顯示該客戶端的詳細信息,如果設法獲取對象,我知道該怎麼做。感謝

回答

1

您可以通過客戶端向其他頁面的查詢參數:

NavigationService.Navigate(
     new Uri("/MainPage.xaml?client="+clientId, UriKind.Relative)); 
在你的MainPage OnNavigatedTo()

然後檢索客戶端:

if (this.NavigationContext.QueryString.ContainsKey("client")) 
      client = this.NavigationContext.QueryString["client"];