Autor Beitrag
Aggins
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 04.07.08 12:11 
Hallo,
bei meiner Anwendung möchte einem ItemsControl einen Background mit Hilfe von DataBinding zuweisen. Dazu verwende ich folgenenden Befehl: Background="{Binding Path=GreenBodyData}", wobei GreenBodyData ein object in meinem DatenContainer ist. Schließlich berechne ich die GreenBodyData und weise sie dem ItemsControl mit dem Befehl: itemscontrol.Background = imageBrush zu. Doch der Bildschirm bleibt weiß! Auch wenn ich die Datanbank anspreche und dort die GreenBodyData mit this._dataBase.GreenBody.GreenBodyData = new GreenBody(...) setze, passiert nichts. Kann mir jemand helfen?

Ciao
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Aggins am Fr 04.07.08 18:32, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.07.08 16:35 
Hallo und :welcome:!

Irgendwie verstehe ich nicht wirklich, was Du versuchst, zu machen :gruebel:

user profile iconAggins hat folgendes geschrieben:
bei meiner Anwendung möchte einem ItemsControl einen Background mit Hilfe von DataBinding zuweisen.

Soweit ist's klar.

user profile iconAggins hat folgendes geschrieben:
Dazu verwende ich folgenenden Befehl: Background="{Binding Path=GreenBodyData}", wobei GreenBodyData ein object in meinem DatenContainer ist.

Das muss ja dann z.b. ein SolidColorBrush sein (oder eine der anderen Brushes).

user profile iconAggins hat folgendes geschrieben:
Schließlich berechne ich die GreenBodyData und weise sie dem ItemsControl mit dem Befehl: itemscontrol.Background = imageBrush zu.

Was denn nun? DataBinding oder Zuweisung? Eines von beidem ist überflüssig.

user profile iconAggins hat folgendes geschrieben:
Auch wenn ich die Datanbank anspreche und dort die GreenBodyData mit this._dataBase.GreenBody.GreenBodyData = new GreenBody(...) setze, passiert nichts.

Hä? Wieso soll sich das ItemsControl ändern, wenn Du in der Datenbank was machst? :gruebel:

user profile iconAggins hat folgendes geschrieben:
Kann mir jemand helfen?

Dazu musst Du wohl erst einmal ein bisschen Dein Posting entwirren ;-)

Grüße
Christian

//edit: Der Titel Deines Thread darf ruhig auch etwas ausführlicher sein :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Aggins Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 04.07.08 17:15 
Hallo,
1. Ich verwende ein ImageBrush. Zuallererst erzeuge ich ein Bild, welches ich als BitmapSource abspeichere. Dieses weise ich dann dem ImageBrush zu.
2. Naja, da ich zuerst das Bild erzeugen muss, kann ich es erst schließlich später zuweisen. Und eigentlich ist es egal, wie ich es dann zuweise, per Datenbankzugriff oder per ItemsControlzugriff. Ich habe genau nach dem gleichen Muster meinem ItemsControl seine Items zugewiesen. Dort hat es eine spätere Zuweisung auf beide Weisen funktioniert (die Daten wurden dann automatisch in der Datenbank bzw. im ItemsControl aktualisiert).

Ciao
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.07.08 17:29 
Hallo!

Du hast mir (unter anderem) diesen Sourcecode zukommen lassen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            this._dataBase = new DataBase();
            this.DataContext = this._dataBase;

            this._dataBase.GreenBody = new GreenBody();

            ImageBrush imageBrush = new ImageBrush();
            imageBrush.ImageSource = new BitmapImage(new Uri("pack://application:,,,/Copy.png"));
            this._dataBase.GreenBody.GreenBodyData = imageBrush;


Du benutzt als Binding-Path aber nur "GreenBodyData". Dafür muss der DataContext aber "this._dataBase.GreenBody" sein, oder der Path entsprechend anders. Außerdem würde ich den DataContext ganz zuletzt setzen, wenn alle Instanzen erstellt sind.


Und nun, quasi in eher offizieller Funktion, noch ein paar Worte dazu, wie man am Besten in einem Forum fragt:

Versetze Dich in die Lage von jemanden, der Dein Projekt nicht auf dem Bildschirm hat, der nicht weiß, welche Klassen Du hast. De Deinen Quellcode nicht kennt. Und überlege dann, welche Informationen Du geben musst. Wie hätte ich, ohne den Quellcode zu kennen (und im Forum stand er ja nicht), Deine Frage beantworten sollen? Woher sollte jemand wissen, dass Du mit "Datenbank" nicht MySQL oder MS-SQL meinst, sondern nur eine normale Klasse mit Namen "DateBase"?

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Aggins Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 04.07.08 17:39 
Hallo,
geht ja flott hier! Danke schon einmal. Ich werde demnächst die Sachverhalte ordentlicher formulieren.
Aber wegen deinen Anmerkungen:
1. Den DataContext kann ich leider in meinem richtigen Programm nicht später setzen. Es aber auch nicht tragisch. Alle anderen Zuweisungen über DataBindung funktionieren, nur nicht die Background-Zuweisung.
2. Falls ich den DataContext ändere, hilft das leider auch nicht.

Ciao
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.07.08 17:46 
Wenn Du den DataContext nicht später setzen kannst, dann musst Du in Deinen Klassen das INotifyPropertyChanged-Interface implementieren, damit die GUI "bemerkt", dass Du jetzt einen Wert gesetzt hast.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Aggins Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 04.07.08 17:49 
Hallo,
das habe ich schon probiert und es funktioniert leider auch nicht. Eventuell habe ich aber dort einen Fehler gemacht. Ich habe sogar die GreenBodyData in eine ObservableCollection gesteckt. In dem Fall braucht keine INotifyPropertyChanged schreiben, es geht dann ganz automatisch. Aber leider hat auch das nichts geholfen.

In meinem Testprogramm hat das später setzen des DataContextes jetzt doch geholfen. Ich glaube ich probiers einfach nochmal aus mit dem INotifyPropertyChanged.


Zuletzt bearbeitet von Aggins am Fr 04.07.08 17:54, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.07.08 17:52 
Mir fällt auf, dass Du wahrscheinlich Deinen ursprünglichen Quellcode benutzen kannst, wenn Du den Binding-Path auf "{Binding Path=GreenBody.GreenBodyData}" änderst.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Aggins Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 04.07.08 18:11 
Hallo,
ich war erstaunt, dass man sowas wie Binding-Path auf "{Binding Path=GreenBody.GreenBodyData}" überhaupt schreiben kann. An anderen Stellen ist mir sowas immer abgestürzt.
Also ich habe jetzt nochmal alles ausprobiert, INotifyPropertyChanged hilft nicht. Den DataContext später zu setzen hilft nur in meinem Beispielprogramm, aber leider nicht in meinem Hauptprogramm (habe da doch noch eine Möglichkeit entdeckt gehabt ihn zu setzen). Das was du mir gerade geschrieben hast hat leider auch keinen Unterschied gemacht.
Es passiert immer folgendes: Wenn ich den Datenbankeintrag abändere, steht zwar ein korrekter Eintrag, nur leider wird der Hintergrund nicht aktualisiert. Falls ich den Backgorund direkt zuweise, erscheint er, nur die Datenbank wird nicht aktualisiert.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.07.08 18:26 
Wenn ich Dein Demoprogramm nehme, frisch entzippe und nur den Binding-Path ändere, wird bei mir die Grafik korrekt angezeigt. :nixweiss:

Ach ja, könntest Du das Demoprogramm noch im Forum posten (als Anhang)? Dann sind alle Informationen hier im Thread und andere Nutzer dürfen auch "mitspielen" ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Aggins Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 04.07.08 18:54 
Hallo,
also in meinem Demoprogramm funktioniert alles tadellos, falls ich den DataContext ganz am Schluß und über "this.DataContext = this._dataBase.GreenBody" setze. Leider kann ich das in meinem Hauptprogramm nicht machen, dort MUSS ich "this.DataContext = this._dataBase" schreiben. Und das hilft dann nichts.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 04.07.08 23:09 
Ich schrieb, dass ich nur den Binding-Path geändert habe. Nicht die Reihenfolge, nicht den DataContext. Nur den Binding-Path. Und dann läd das Bild!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Aggins Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mo 07.07.08 11:11 
Den BindingPath zu ändern hilft! Leider reicht das in meinem Hauptprogramm nicht aus. Naja wenigstens kann ich jetzt ein paar Sachen ausschließen.

Danke schön!