2010-11-19 15 views
2

J'ai donc une liste d'objets contenant un nom et un numéro liés à une zone de liste en XAML. La boîte de liste affiche le nombre bien, mais je veux qu'il appelle le numéro de téléphone using phonecall sur le clic. Voici le code onlick:WP7 - Appelez le numéro lié en cliquant sur l'élément de la zone de liste

private void taxiListItem_Click(object sender, RoutedEventArgs e) 
    { 
     Microsoft.Phone.Tasks.PhoneCallTask phonecall = new Microsoft.Phone.Tasks.PhoneCallTask(); 
     phonecall.PhoneNumber = "213"; 
     phonecall.Show(); 
    } 

et c'est là que je définis l'objet TaxiCompany qui remplit la liste.

public class TaxiCompany { 
     public String CoName { get; set; } 
     public String Phone { get; set; } 
     public TaxiCompany(String coname, String phone) { 
      this.CoName = coname; 
      this.Phone = phone; 

     } 
    } 

L'appel téléphonique fonctionne correctement lorsque je compose le numéro en dur. Maintenant, quand je mets phonecall.Phonenumber = sender.getPhone() ou e.Phone() ou n'importe quelle variante des deux, son marqué comme une méthode indéfinie. Est-ce que je fais quelque chose de fondamentalement mauvais ici? Je suppose que l'expéditeur d'objet ou e est l'élément de liste sur lequel on clique.

Note: la zone de liste dans le XAML affiche à la fois le numéro de téléphone et adresse très bien

    <Button Click="taxiListItem_Click" Width ="436" Height="120"> 
         <Button.Content> 
          <StackPanel Orientation="Vertical" Height=" 80"> 
          <StackPanel Orientation="Horizontal" Height="40" Width="436"> 
           <TextBlock Width="436" FontSize="30" Text= "{Binding CoName}" Height="40"/> 
          </StackPanel> 
          <StackPanel Orientation="Horizontal" Height="40" Width="436"> 
           <TextBlock Name ="PhoneNo" Width="300" FontSize="22" Text= "{Binding Phone}" Height="40"/> 
          </StackPanel> 

          </StackPanel>  
         </Button.Content> 
        </Button> 

Première fois travailler avec C#/Silverlight de sorte que toute aide serait apprecaited.

+0

Comment votre bouton se rapportent à votre listbox? –

+0

J'utilise un {Binding} - c'est ce que vous demandiez? – varunsrin

Répondre

4

Essayez ceci. La liste déroulante montre les compagnies de taxis et la sélection d'un article dans la liste entraîne la numérotation du numéro de téléphone.

Notez qu'il n'est pas nécessaire d'ajouter des boutons à la liste et qu'il est nécessaire de convertir les variables transmises à l'événement de sélection. (Pourrait également jeter l'expéditeur à une zone de liste, puis jeter l'élément sélectionné.)

XAML:

<ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding TaxiCompanies}" SelectionChanged="MainListBox_SelectionChanged"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Height=" 80"> 
       <TextBlock Width="436" FontSize="30" Text= "{Binding CoName}" Height="40"/> 
       <TextBlock Name ="PhoneNo" Width="300" FontSize="22" Text= "{Binding Phone}" Height="40"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

cs:

// class used for example. Another name would be more appropriate 
public class ViewModel 
{ 
    public ObservableCollection<TaxiCompany> TaxiCompanies { get; private set; } 

    public ViewModel() 
    { 
     TaxiCompanies = new ObservableCollection<TaxiCompany>(); 
     TaxiCompanies.Add(new TaxiCompany("AAA Cabs", "123-456-789")); 
     TaxiCompanies.Add(new TaxiCompany("BBB Taxis", "111234329")); 
     TaxiCompanies.Add(new TaxiCompany("CCC Cars", "98765432")); 
    } 
} 

    public MainPage() 
    { 
     InitializeComponent(); 

     // Set the data context of the listbox control to the sample data 
     DataContext = new ViewModel(); 

     this.Loaded += new RoutedEventHandler(MainPage_Loaded); 
    } 

    private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var phonecall = new PhoneCallTask(); 
     phonecall.PhoneNumber = ((TaxiCompany)(((object[])(e.AddedItems))[0])).Phone; 
     phonecall.Show(); 

     // Reset selected index to -1 (no selection) 
     MainListBox.SelectedIndex = -1; 
    } 
+0

merci! ce MainListBox.SelectedIndex = -1; déclaration a continué de provoquer un accident si, quand je l'ai commenté c'était bien – varunsrin

+0

Je voudrais upvote votre réponse, mais je n'ai pas la réputation :( – varunsrin