2016-07-20 2 views
-2

J'ai un bloc de texte sur mon interface utilisateur. Je voudrais afficher du texte sur le bloc de texte dynamiquement. Je l'ai implémenté comme indiqué dans le code ci-dessous. Cependant, je ne vois pas les valeurs mises à jour dynamiquement. Je ne vois que la dernière valeur mise à jour sur le bloc de texte de l'interface utilisateur. J'ai inclus un délai pour noter le changement.Mise à jour dynamique de la valeur de TextBlock dans wpf [Sovled]

S'il vous plaît fournir une solution ou un commentaire pour plus d'informations.Merci à l'avance.

Code: 

namespace TxtBlock 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     SomeObjectClass obj = new SomeObjectClass(); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      txtName.DataContext = obj; 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      obj.Name = "Hello World"; 

      Thread.Sleep(2000); 
      obj.Name = "Third"; 
     } 

    } 

    class SomeObjectClass : INotifyPropertyChanged 
    { 
     private string _name = "hello"; 
     public string Name 
     { 
      get 
      { 
       return _name; 
      } 
      set 
      { 
       _name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnPropertyChanged(string PropertyName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(PropertyName)); 
     } 
    } 

} 

XAML: <Window x:Class="TxtBlock.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Button Content="Button" HorizontalAlignment="Left" Margin="237,170,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> 
     <TextBlock HorizontalAlignment="Left" Margin="237,256,0,0" TextWrapping="Wrap" x:Name="txtName" Text="{Binding Name}" VerticalAlignment="Top"/> 

    </Grid> 
</Window> 
+0

exécute en millisecondes ... u ofcourse ne fera que c la dernière valeur. Google wpf contraignant et retards. Vous trouverez beaucoup de choses là-bas – Akanksha

+0

Oui, je suis d'accord, mais le résultat est le même, même avec un retard. J'ai essayé avec des retards 1sec 2sec pour observer le changement. – Sagar

+0

Quelqu'un d'autre s'il vous plaît répondre. – Sagar

Répondre

0

Vous devez exécuter en fil d'arrière-plan pour mettre à jour vos valeurs dans l'interface utilisateur TextBlock

code:

public partial class TextBlockExample : Window 
{ 
    ThreadExampleViewModel viewModel = new ThreadExampleViewModel(); 

    public TextBlockExample() 
    { 
     InitializeComponent(); 
     this.DataContext = viewModel; 
    } 

    private void btnClick_Click(object sender, RoutedEventArgs e) 
    { 
     /// Background thread Thread to run your logic 
     Thread thread = new Thread(YourLogicToUpdateTextBlock); 
     thread.IsBackground = true; 
     thread.Start(); 
    } 

    private void YourLogicToUpdateTextBlock() 
    { 
     /// Example i am updating with i value. 
     for (int i = 0; i < 1000; i++) 
     { 
      viewModel.Name = i + " Conut"; 
      Thread.Sleep(1000); 
     } 
    } 
} 



<Grid> 
    <StackPanel> 
     <TextBlock x:Name="txtName" Text="{Binding Name}" Height="30" Width="100" Margin="10"/> 
     <Button x:Name="btnClick" Content="Click" Height="30" Width="100" Margin="10" Click="btnClick_Click"/> 
    </StackPanel> 
</Grid> 




public class ThreadExampleViewModel : INotifyPropertyChanged 
{ 

    private string name = "Hello"; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; OnPropertyChanged("Name"); } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string PropertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(PropertyName)); 
    } 
} 
code
+0

Copain génial, merci. Ça marche. tu m'as sauvé la vie :) – Sagar