0

目前我在 Windows Phone 中有一个使用本地数据库的 Silverlight 应用程序。基本上会生成一个 listBox 来显示存储的“客户”的当前列表,它工作正常。现在我希望能够让用户编辑客户的详细信息之一。为此,我创建了一个新页面,每当用户单击主页上的按钮时都会加载该页面。事件如下:

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 为空。如何从其他类获取对象而不使其为空?因为我不想从主类中删除该项目,以防万一用户决定取消操作。此外,我想在加载页面时显示该客户端的详细信息,如果我设法获取对象,我知道该怎么做:)。谢谢

4

1 回答 1

1

您可以将客户端作为查询参数传递给其他页面:

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

然后在您的 MainPage 中OnNavigatedTo()检索客户端:

   if (this.NavigationContext.QueryString.ContainsKey("client"))
          client = this.NavigationContext.QueryString["client"]; 
于 2012-04-17T14:27:53.417 回答