¿Cómo acceder a una propiedad desde otra clase/control, desde dentro de una clase personalizada?

Estoy tratando de replicar el sistema de mensajería de los teléfonos con Windows, pero con otro servicio. Estoy usando el control Chat Bubble de la Juego de herramientas Coding4Fun para Windows Phone hacer esto.

(Captura de pantalla del control Burbuja de chat):

enter image description here

El código que se me ocurrió a continuación funciona bien, sin embargo, la propiedad ChatBubbleDirection dentro de mi plantilla de datos produce un error cuando está vinculado a datos. Esto se debe a que no sé cómo usar una propiedad de otra clase (si esto tiene sentido). ¿Cómo se haría esto? Simplemente no podía entenderlo...

La propiedad XAML debería verse así:

ChatBubbleDirection="LowerLeft"

Como puede adivinar, esto determinará la dirección de la pequeña flecha de ChatBubble.

Aquí está el código para la clase de mensaje:

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; }
}

Y aquí está el código para el evento de clic de botón:

    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);
    }

Y aquí está el 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>

¿Alguien tiene alguna idea de lo que debo escribir en la clase Mensaje? Realmente no sé cómo explicar más mi problema. Intenté extender la clase ChatBubble dentro de mi clase Mensaje (como puede ver), pero fue en vano.

¡Gracias de antemano por cualquier ayuda!

preguntado el 31 de julio de 12 a las 13:07

3 Respuestas

Su clase de mensaje debe tener una propiedad expuesta públicamente llamada Dirección, que vinculará a ChatBubbleDirection de ChatBubble.

private string direction;

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

ChatBubbleDirection puede ser uno de los siguientes

  • Superior derecha
  • Arriba a la izquierda
  • Inferior derecha
  • InferiorIzquierda

Eso debería funcionar, creo.

Puede encontrar más información aquí en WindowsPhoneGeek.

Respondido 31 Jul 12, 13:07

Parece que estaba complicando demasiado las cosas... ¡Una simple cadena fue todo lo que se necesitó para que funcionara! Gracias amigo :D- joel murphy

Su clase Message amplía la clase ChatBubble, por lo que ya tiene la propiedad ChatBubbleDirection de la clase principal. Todo lo que necesitas escribir es:

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

Respondido 31 Jul 12, 13:07

Esto no funcionó en la encuadernación. +1 por ayudar de todos modos! Gracias. - joel murphy

En la clase

    public ChatBubbleDirection _Direction;

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

en código principal

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

Respondido 02 ago 15, 21:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.