0

現在、ローカルデータベースを使用するSilverlightアプリケーションがWindowsPhoneにあります。基本的に、listBoxは、保存されている「クライアント」の現在のリストを表示するために生成されます。これは正常に機能します。ここで、ユーザーがクライアントの詳細の1つを編集できるようにしたいと思います。このために、ユーザーがメインページのボタンをクリックするたびに読み込まれる新しいページを作成しました。イベントは次のとおりです。

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がnullであるためです。nullにせずに、他のクラスからオブジェクトを取得するにはどうすればよいですか?ユーザーが操作をキャンセルすることにした場合に備えて、メインクラスからアイテムを削除したくないためです。また、ページが読み込まれたときにそのクライアントの詳細を表示したいと思います。これは、オブジェクトを取得できた場合の方法を知っています:)。ありがとう

4

1 に答える 1

1

クライアントをクエリパラメータとして他のページに渡すことができます。

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

次に、MainPageOnNavigatedTo()でクライアントを取得します。

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