C# de la liaison de données - automatiquement l'écriture de la propriété modifiée de l'étiquette ou de la zone de texte
J'ai lu à propos de la liaison de données, la plupart des choses compliquées comme SQL ou quoi que XAML et d'autres choses.
Tout ce que je veux de mon programm de faire, si la "valeur" d'une variable change juste de l'écrire dans une zone de texte ou l'étiquette. (à l'aide de WindowsForms)
Pour l'instant ce que j'ai:
namespace DataBinding_Test
{
public partial class Form1 : Form
{
BindingSource bs = new BindingSource();
Class1 test = new Class1();
public Form1()
{
InitializeComponent();
test.name = "Hello";
bs.DataSource = test;
label1.DataBindings.Add(new Binding("Text", bs, "name", false, DataSourceUpdateMode.OnPropertyChanged));
}
private void button1_Click(object sender, EventArgs e)
{
test.name = textBox1.Text;
}
}
}
Class1 juste un nom de propriété. Au démarrage lable1 vais montrer ma chaîne "Hello". Puis sur le bouton cliquez sur le nom de la propriété va changer. Sur debug j'ai vu la réelle source de données de "bs" contient la nouvelle valeur de la propriété, mais l'étiquette ne sera pas montrer quoi que ce soit...
Est-il realtivly moyen facile de faire cela?
Le Backround est: régulièrement, il y aura une interrogation de données de capteur par RS232. Si la valeur d'un capteur de changements que je veux montrer l'étiquette ou la zone de texte. Maintenant un backroundthreaded minuterie besoin invoque et des trucs pour accéder à l'interface graphique thread; pensais que ce serait plus facile avec la liaison de données, mais ne semble pas 😛
Merci à tous, super site, bon travail! 🙂
C#
et databindings
peut être retiré, ce qui laisse "est-il un moyen facile?" et la réponse est "oui". oui, il est". Le titre devrait expliquer en bref ce que votre problème est.Fait, j'espère que c'est mieux maintenant!
Avez-vous lu à propos de l'événement? Je suppose que vous pourriez l'utiliser ici. Avez-vous essayé d'utiliser WPF à la place? Databindings sont plus personnalisé en WPF. Je ne pense pas qu'il y est tout magique "automatique" façon de le faire
Oui je sais événements; est-il un moyen de mettre en œuvre propertychanged événements par moi-même?
OriginalL'auteur Patrick | 2013-09-13
Vous devez vous connecter pour publier un commentaire.
Une autre façon de faire fonctionner les choses, sans la mise en œuvre de
INotifyPropertyChanged
Le truc est d'avoir de l'événement avec le nom combiné par le nom de la propriété et
Changed
suffixe et de le porter à chaque fois que la valeur de votre propriété est modifiéeOriginalL'auteur Demarsch
Dans l'ordre de votre code de travail, vous devriez mettre en œuvre INotifyPropertyChanged interface dans votre bindings classe. Sans elle, votre liaison ne le sait pas, quand le changement se fait. De là, vous devriez implenent la logique, fonction à laquelle vous souhaitez informer vos abonnés sur qui quand quelque chose a changé dans votre classe (le setter de la partie) et ce qui a changé (PropertyChangedEventArgs). Voir l'exemple de votre classe:
Et de changer le nom de la propriété à partir de "nom" "Nom" dans votre liaison:
OriginalL'auteur Alex
OriginalL'auteur user3952461
J'ai créé une méthode d'extension pour cette raison que je voudrais partager
Utilisation
Extension
OriginalL'auteur Jan-Fokke
Je ne suis pas sûr si c'est ce que vous voulez, mais vous pouvez écrire ce que vous variable contient dans la zone de texte ou l'Étiquette à l'aide du contrôle.Texte de la propriété.
ou
Pourquoi dou vous souhaitez utiliser la liaison de données? Son mutch plus facile de cette façon.
Il n'est pas toujours facile de manière à être le chemin à parcourir. La liaison est une fonctionnalité très puissante, qui permet à votre application de plus réussi, mieux piloté par les tests et développeur indépendant. Je argee que votre réponse est la soulution pour le problème, mais supposons que dans la réalisation de projets concrets, il ne sera pas acceptable.
Merci pour votre commentaire. Je suis d'accord avec vous. C'est une solution simple mais à quelques points pour assurer pas la meilleure façon d'aller. Cela dépend vraiment sur l'ensemble de fond qui est mieux aller. Dans mon oppinion l'invocation de la solution est assez bonne. J'ai fait de très bonnes expériences à l'aide dans des threads en collaborant avec les WinForms.
OriginalL'auteur colosso