[WPF] RichTextBox mit Collection verbinden
-
public class AppendableRichTextBox : ListBox
{
// implement copy & paste issues
}waer das keine idee ?
oder auchpublic class AppendableRichTextBox : RichTextBox
{
// implement CollectionView for binding
}am sonsten
c#:
public ObservableCollection<string> Lines = new ObservableCollection<string>();xaml:
<RichTextBox Text="{Binding Lines, Converter={StaticResource SchlagMich}}" />c#
SchlagMichConverter
return string.Join("\n", (source as ObservableCollection<string>).ToArray());dann brauchst du den string nur in die liste packen, der converter kann dann auch ruhig alles ueberschreiben, voellig wurst
-
Mr Evil schrieb:
public class AppendableRichTextBox : ListBox
{
// implement copy & paste issues
}waer das keine idee ?
Das wird glaub ich zu komplex.
Mr Evil schrieb:
oder auch
public class AppendableRichTextBox : RichTextBox
{
// implement CollectionView for binding
}Das wäre dagegen interessant, wenn du noch erklären würdest, was du hier genau mit CollectionView meinst und vielleicht noch ein Tutorial oder Artikel dazu kennst?
*sich selber schonmal auf die Suche begibt*Mr Evil schrieb:
dann brauchst du den string nur in die liste packen, der converter kann dann auch ruhig alles ueberschreiben, voellig wurst
Zum einen habe ich, wie schon gesagt, nicht nur Strings, sondern Elemente mit Formatierungsangaben. Zum anderen frag ich mich nach der Effizienz, wenn hier immer wieder alles überschrieben wird. Das können tausende von Elementen sein mit jeweils hunderten von Zeichen. Das ganze dann mit Formatierung und co, da befürchte ich einfach ein Flackern und das wäre sehr unschön.
Grüssli
-
das war nur aus der huefte geschossen
man koennte versuchen ICollectionView zu implementieren - aber ne genauere idee haette ich auch nicht
meine idee ist einfach diese das man im code dann bei "Add" oder dergleichen die entsprechende "AppendText" funktion aufruft
das ICollectionView dient dann nur als wrapper fuers bindingaber was auch gehen wuerde waere ein DependencyProperty auf eine interne liste, und in der classe dann wird nach jede aenderung der liste (INotifyCollectionChanged) der inhalt der box aktualisiert, zb angehangen usw
so ala
// nur pseudo zum verdeutlichen was ich mein
class ListRichTextBox : RichTextBox
{
DepencencyProperty.Register("Content", typeof(List<object>));
OnCollectionChanged()
{
this.AppendText(change);
}
}
-
Ich gebe auf. Habe in der Versuchphase bemerkt, dass ObservableCollection nur auf Vista verfügbar ist. Weiss der Geier wieso. Und dieses Ding nun auch noch selber zu implementieren habe ich keine Lust. Ich mache das auf einfache und altmodische Weise über C# Code.
Habe sowieso schon ein entsprechendes Event dafür, muss somit nur noch auf dieses Event hören und kann dann immer den Text einfügen. Eine Methode anstatt einer ganzen Klassenbatterie, da fällt die Entscheidung leicht. Klar, es hätte gewisse Vorteile, aber die Arbeitsmenge steht langsam in keinem Verhältnis mehr zum Nutzen. Erst recht für einen Anfänger wie mich. Kann das später immer noch implementieren, wenn ich es wirklich brauche und ich dann mehr Erfahrung habe.
@Mr Evil,
Danke für die Hilfe.Grüssli
-
hae ?
die ObservableCollection ist bestandteil des .net frameworks, muesste zusammen mit wpf mit der 3.5 geliefert werden
das hat mit xp - vista usw ueberhaupt nichts zu tun
-
Dann probier die Klasse mal in Visual Studio unter XP zu verwenden. Er wird die Klasse nicht finden. Oder schau gleich hier vorbei:
http://msdn.microsoft.com/de-de/library/ms668604.aspxUnter Platformen steht wunderbar nur Vista.
Ich dachte bisher auch, dies hätte nichts direkt mit Vista oder XP zu tun, sondern nur mit der .NET Framework Version, aber anscheinend ist dem nicht so ...
Grüssli
-
bei dem framework hat microsoft ueberall nur vista stehen - das heisst gar nix
auf arbeit entwickel ich auch unter xp - kein thema
evtl hast du das .net framework 3.5 mit sp1, und der ziel rechner nicht ?http://www.c-plusplus.net/forum/viewtopic-var-t-is-238821-and-highlight-is-.html
-
bei dem framework hat microsoft ueberall nur vista stehen - das heisst gar nix
Das ist so nicht richtig. Die "Plattform" Informationen sind sehr unterschiedlich und reichen von "nichts" bis hin zu einer längeren Liste.
Plattformen
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
evtl hast du das .net framework 3.5 mit sp1, und der ziel rechner nicht ?
ObservableCollection<(Of <(T>)>) (generische Klasse)
.NET Framework
Unterstützt in: 3.5, 3.0 SP1, 3.0Dann probier die Klasse mal in Visual Studio unter XP zu verwenden. Er wird die Klasse nicht finden.
ObservableCollection<T> scheint mir auch auf XP verfügbar unabhängig von der Plattformangabe in der MSDN. (Zumindest kann ich ein einfaches Beispiel übersetzen und ausführen).
Eventuell vergessen einen Verweis auf WindowsBase zu legen ?
-
Knuddlbaer schrieb:
Eventuell vergessen einen Verweis auf WindowsBase zu legen ?
Getroffen und versenkt. Aber wieso ist sowas nicht automatisch bei einer WPF Anwendung dabei? Kann eine WPF Anwendung überhaupt ohne sowas auskommen? 0..o
Und wieso ist das Zeug in WindowsBase? Hatte nämlich extra geprüft, ob ichSystem.Collections
drin habe, bzw. die anderen Klassen ausSystem.Collections.ObjectModel
haben funktioniert.Werde wohl mal mein Template für die WPF Anwendungen prüfen müssen, ob da irgendwo versehentlich was verändert wurde. Aber das erst nachdem ich schlafen gegangen bin.
Und meine Entscheidung bleibt auch fest. Ist mir einfach zu kompliziert über den anderen Weg und das ganze Data Binding immer noch ein zu grosses Rätsel. Möchte mich da lieber etwas sanfter annähern, sonst verlier ich noch vollständig die Lust daran und lern es nie
Bzw. vielleicht wäre auch ein Buch dazu mal nit schlecht, welches dies ein wenig ausführlicher behandelt.Grüssli und nochmals Danke
-
Dravere schrieb:
Knuddlbaer schrieb:
Eventuell vergessen einen Verweis auf WindowsBase zu legen ?
Getroffen und versenkt. Aber wieso ist sowas nicht automatisch bei einer WPF Anwendung dabei?
Ähmm... Visual C# 2008 Express, Neue WPF-Anwendung: WindowsBase vorhanden.
Dravere schrieb:
Bzw. vielleicht wäre auch ein Buch dazu mal nit schlecht, welches dies ein wenig ausführlicher behandelt.
Ich finde das die meisten etwas umfangreicheren WPF-Bücher äußerst detailliert sind (Gerade in Bezug zu DataBinding, Templates und Co).
cu André
-
Bezüglich des Buches, kann ich dir nur das hier empfehlen Dravere:
http://www.amazon.de/Windows-Presentation-Foundation-NET-Benutzerschnittstellen/dp/3446410414/ref=sr_1_2?ie=UTF8&s=books&qid=1242195834&sr=8-2Hab ich mir letztens gekauft, wirklich Bombe das Teil, sehr detailliert und auch gut geschrieben.
-
LoL, ich glaub ich habe mich gestern so aufgeregt, dass dies nicht einfacher geht, dass ich mich wohl noch im Projekt verklickt habe. Anders kann ich es mir nicht mehr erklären, das Template ist korrekt und wenn ich heute ein WPF Projekt starte, dann ist WindowsBase vorhanden. Wobei mir nicht ganz klar ist, was ich dann angeklickt habe, da ich so ein WPF Design Fenster hatte ... *schulterzuck*
@Firefighter,
Danke für die Empfehlung. Es ist sogar schon auf meiner ListeFalls noch mehr Empfehlungen getätigt werden können, nur her damit
Grüssli
-
hei - template ist n gutes stichwort
werd doch ma schaun ob ich mir ein gutes mvvm template zurecht legen kann {=