estoy usando Silverlight para Windows Phone 7.Databinding TextBlock ejecuta en Silverlight/WP7
Quiero mostrar la primera parte de un texto en un TextBlock en negrita, y el resto en letra normal. El texto completo debe envolver. Quiero que la parte en negrita contenga texto de una propiedad en mi ViewModel y que el texto plano contenga texto de una propiedad diferente.
El TextBlock se define en un DataTemplate asociado a un LongListSelector.
Mi primer intento fue:
<TextBlock TextWrapping="Wrap">
<TextBlock.Inlines>
<Run Text="{Binding Property1}" FontWeight="Bold"/>
<Run Text="{Binding Property2}"/>
</TextBlock.Inlines>
</TextBlock>
Esta falla en tiempo de ejecución con el "AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR" espectacularmente inútil. Este es un problema conocido porque el elemento Ejecutar no es un FrameworkElement y no puede vincularse.
Mi siguiente intento fue poner marcadores de posición en su lugar, y luego actualizarlos en el código: (sí, estoy desesperado)
<TextBlock Loaded="TextBlockLoaded" TextWrapping="Wrap">
<TextBlock.Inlines>
<Run FontWeight="Bold">Placeholder1</Run>
<Run>Placeholder2</Run>
</TextBlock.Inlines>
</TextBlock>
En el código subyacente:
private void TextBlockLoaded(object sender, RoutedEventArgs e)
{
var textBlock = (TextBlock)sender;
var viewModel = (ViewModel)textBlock.DataContext;
var prop1Run = (Run)textBlock.Inlines[0];
var prop2Run = (Run)textBlock.Inlines[1];
prop1Run.Text = viewModel.Property1;
prop2Run.Text = viewModel.Property2;
}
Esto parecía para trabajar, pero debido a que estoy utilizando el LongListSelector, aunque los elementos se reciclan, el controlador de eventos Loaded codebehind no reinicializa las ejecuciones, por lo que muy rápidamente se muestra el texto incorrecto ...
He analizado el uso del evento Linked de LongListSelector (que ya uso para liberar las imágenes que se muestran en la lista), pero no veo cómo puedo usar eso para reinicializar las propiedades de texto de Runs.
Cualquier ayuda apreciada!
+1. Buena pregunta, me he preguntado sobre esto también. – Stan