2012-07-31 6 views
1

J'essaie de répliquer le système de messagerie de Windows Phone, mais avec un autre service. J'utilise le contrôle Chat Bubble du Coding4Fun Toolkit for Windows Phone pour ce faire.Comment accéder à une propriété d'une autre classe/d'un contrôle, à partir d'une classe personnalisée?

(Capture d'écran de la commande Bubble Chat):

enter image description here

Le code que je suis venu avec ci-dessous fonctionne très bien, mais la propriété ChatBubbleDirection dans mon DataTemplate produit une erreur quand il est lié aux données. C'est parce que je ne sais pas comment utiliser une propriété d'une autre classe (si cela a du sens?). Comment cela serait-il fait? Je ne pouvais pas le comprendre ...

La propriété XAML devrait ressembler à ceci:

ChatBubbleDirection="LowerLeft" 

Comme vous pouvez le deviner, cela permettra de déterminer la direction de la petite flèche du ChatBubble.

Voici le code de la classe de message:

using Coding4Fun.Phone.Controls.Toolkit.Common; 

public class Message : Coding4Fun.Phone.Controls.ChatBubble 
{ 
    public string Text { get; set; } 
    public string SendingDate { get; set; } 
    //public Coding4Fun.Phone.Controls.ChatBubble { get; set; } 
} 

Et voici le code pour le bouton événement click:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     LBmessages.ItemsSource = messages; 
     Message m = new Message(); 
     m.SendingDate = "Today"; 
     m.Text = "This is a message"; 
     //m.direction = (Coding4Fun.Phone.Controls.ChatBubble).ChatBubbleDirectionProperty??? 
     messages.Add(m); 
    } 

Et voici le XAML:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <ScrollViewer Height="369" Name="scrollviewer1" Width="500"> 
      <ListBox Name="LBmessages" Height="250"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid Width="456"> 
          <cc:ChatBubble Width="500" Margin="0,0,0,20" ChatBubbleDirection="{Binding direction}"> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto"></RowDefinition> 
            <RowDefinition Height="40"></RowDefinition> 
           </Grid.RowDefinitions> 
           <TextBlock Text="{Binding Text}" TextWrapping="Wrap" Width="430"></TextBlock> 
           <TextBlock Grid.Row="1" HorizontalAlignment="Right" Text="{Binding SendingDate}"></TextBlock> 
          </Grid> 
         </cc:ChatBubble> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     </ScrollViewer> 
    </StackPanel> 

Quelqu'un avoir une idée de ce que je devrais écrire dans la classe Message? Je ne sais vraiment pas comment expliquer mon problème. J'ai essayé d'étendre la classe ChatBubble dans ma classe Message (comme vous pouvez le voir), mais sans succès.

Merci d'avance pour toute aide!

Répondre

1

a besoin de votre classe de message d'avoir une propriété appelée exposée publiquement direction, ce qui vous lie à ChatBubbleDirection de ChatBubble.

private string direction; 

public string Direction 
{ 
    get { return direction; } 
    set { direction = value; } 
} 

ChatBubbleDirection peut être l'un des éléments suivants

  • UpperRight
  • supérieur gauche inférieur droit
  • LowerLeft

Cela devrait fonctionner je pense.

Plus d'informations peuvent être trouvées ici sur WindowsPhoneGeek.

+0

On dirait que j'étais trop compliquer les choses beaucoup trop ... Une simple chaîne était tout ce qu'il fallait pour que ça marche! Merci mec: D –

1

Votre classe Message étend la classe ChatBubble, de sorte qu'elle possède déjà la propriété ChatBubbleDirection de la classe parente. Tout ce que vous devez écrire est:

Message m = new Message(); 
m.ChatBubbleDirection = ChatBubbleDirection.LowerRight; 
+0

Cela ne fonctionne pas dans la liaison. +1 pour aider de toute façon! Merci. –

0

En classe

public ChatBubbleDirection _Direction; 

    public ChatBubbleDirection Direction 
    { 
     get 
     { 
      return _Direction; 
     } 
     set 
     { 
      if (value != _Direction) 
      { 
       _Direction = value; 
       NotifyPropertyChanged("Direction"); 
      } 
     } 
    } 

dans le code principal

BBChat.Items.Add(new BMessage() 
{ 
Direction = ChatBubbleDirection.UpperLeft, 
} 
Questions connexes