WPF textblock liaison avec List<string>
personne ne sait si il existe un moyen simple de lier un textblock pour une Liste.
Ce que j'ai fait jusqu'à présent est de créer une listview et le lier à la Liste et puis j'ai un modèle au sein de la liste, qui utilise un seul textblock.
ce que j'aimerais vraiment faire est de lier la Liste à un textblock, et d'afficher toutes les lignes.
En Winforms, il y avait un "Lignes" bien que je puisse simplement jeter de la Liste, mais je ne suis pas le voir sur WPF textblock, ou zone de texte.
Des idées?
ai-je raté quelque chose de simple?
Voici le code
<UserControl x:Class="QSTClient.Infrastructure.Library.Views.WorkItemLogView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="500" Height="400">
<StackPanel>
<ListView ItemsSource="{Binding Path=Logs}" >
<ListView.View>
<GridView>
<GridViewColumn Header="Log Message">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
et le WorkItem Classe
public class WorkItem
{
public string Name { get; set; }
public string Description { get; set; }
public string CurrentLog { get; private set; }
public string CurrentStatus { get; private set; }
public WorkItemStatus Status { get; set; }
public ThreadSafeObservableCollection<string> Logs{get;private set;}
Je suis l'aide de Prism pour créer le contrôle et la mettre dans une WindowRegion
WorkItemLogView newView = container.Resolve<WorkItemLogView>();
newView.DataContext = workItem;
regionManager.Regions["ShellWindowRegion"].Add(newView);
grâce
OriginalL'auteur Joshua | 2008-12-05
Vous devez vous connecter pour publier un commentaire.
Convertir votre Liste à une seule chaîne avec "\r\n" comme séparateur entre les deux. et de lier le TextBlock. Assurez-vous que le TextBlock n'est pas limité par sa hauteur , de sorte qu'il peut croître sur la base du nombre de lignes.
Je voudrais mettre en œuvre la présente comme une Valeur Convertisseur pour Liaison XAML qui convertit une Liste de chaînes de caractères d'une chaîne unique avec la nouvelle ligne ajoutée entre
La ListToStringConverter devrait ressembler à ceci:
OriginalL'auteur Jobi Joy
si vous utilisez le convertisseur, il travaille pour la première fois parfait,
mais si l'un ou plusieurs de journalisation vient à l'enregistrement de la liste, il n'y a pas de mise à jour sur votre contraignant, car le convertisseur ne fonctionne qu'à la première fois.
tous les contrôles qui ne sont point des contrôles de ne pas s'abonner à l'événement listchanged!
voici un peu de code pour ce scénario
le xaml
le convertisseur
MODIFIER
ici est une solution rapide pour la mise à jour propblem (cela peut être aussi fait avec une propriété attachée)
ici est l'utilisation de la
CustomTextBlock
(pas testé)@Alimenté espère que cette aide
j'ai mis à jour ma réponse
Merci, mais j'ai fini par utiliser un MultiValueConverter et la liaison à la collection du Comte de propriété, ce qui a pour effet de mettre à jour le Texte de la propriété chaque fois que la collection est mise à jour. Voir ma réponse à l'autre question similaire: stackoverflow.com/questions/4353186/....
oh je vois, c'est une autre solution pour ce problème, un peu plus agréable que la mienne
OriginalL'auteur punker76
Je vais sans vergogne poster un lien vers ma réponse d'une question très semblable: La liaison ObservableCollection<> à une zone de texte.
Comme punker76 dit, si vous liez votre Texte à une collection, il sera mise à jour lorsque vous définissez la collection, mais pas lors de la collecte des changements. Ce lien montre une alternative à punker76 de la solution (l'astuce est de multi-lier à la collection du comte de trop).
OriginalL'auteur Fueled
Pour concat collection d'objets :
Juste penser à annuler le ToString() de l'objet.
OriginalL'auteur david