Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Lector
Thema: Performant das Objekt aus einer Liste suchen, dessen Zeitstempel am nächsten an Wunschzeit liegt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wäre es nicht schneller wenn man mit einer Teile-und-Herrsche-Strategie da rangehen würde?
Also ein Element in der Mitte schnappen->zu groß/klein -> Element zwischen aktueller Position und Anfang/Ende schnappen->usw.
Was ich eigendlich fragen wollte ist muss ich das alles selbst implementieren oder gibts irgendwas in Linq was mir die Sache vereinfacht und trotzdem performant ist?

SortedList möchte neben dem eigentlichen Datenwert noch einen Key haben. Soll ich da einfach den Zeitwert der Objekte übergeben? Die Wunschzeit hab ich ja zu dem Zeitpunkt noch nicht.

Thema: Performant das Objekt aus einer Liste suchen, dessen Zeitstempel am nächsten an Wunschzeit liegt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo miteinander.
Da ich nach langjähriger Pause endlich mal wieder mit C# arbeite habe ich gleich eine Frage.
Ich habe einige tausend Objekte, in dem sich ein Zeit-Attribut befindet. Nun möchte ich mir gerne das Objekt rausholen, dessen Zeit-Attribut am nähesten an einem bestimmten Wert liegt.

Wie mache ich das am performantesten? Welche Datenstruktur sollte ich verwenden? Ich habe bereits an SortedList gedacht. Das Problem ist dass ich meine Objekte nicht nach Zeit sortieren sollte sondern nach Math.Abs(wunschzeit - o.Zeit).

Wie würdet ihr da vorgehen?

Thema: WPF und 3D
Am im Forum: GUI: WPF und XAML

Du musst dein GeometryModel schon in einen Viewport3D packen damit es richtig dargestellt wird. Tutorials zum Viewport3D gibt es haufenweise im Internet. Da solltest du leicht fündig werden

Thema: Wie komme ich an das Objekt aus dem ItemsPanelTemplate?
Am im Forum: GUI: WPF und XAML

Per Code an diese Elemente zu kommen ist so gut wie unmöglich und auch nicht wirklich sauber.

Am besten machst du es so ähnlich wie hier: http://bea.stollnitz.com/blog/?p=53

Thema: Problem mit CaretIndex
Am im Forum: GUI: WPF und XAML

Hallo,

Ich habe eine TextBox deren Text an ein DependencyProperty gebunden ist. Da ich nur bestimmte Benutzereingaben zulassen will benutze ich die Validierung von WPF. In gewissen Szenarien muss ich die Validierung für dieses Property neu anstoßen. Dies mache ich indem ich den Wert des DependencyProperties kurz ändere und wieder rücksetze. Das funktioniert auch. Leider wird dabei aber der CaretIndex der TextBox wieder zurück auf 0 gesetzt. Das ist ganz schön nervig. Weis jemand wie ich das unterbinden könnte?

Thema: [erledigt] clickables ContentControl
Am im Forum: GUI: WPF und XAML

Das liegt daran dass WPF die Mauseingaben nur erfasst wenn du auf einem eingefärbten Bereich bist. Setzte mal die Background-Eigenschaft vom StackPanel auf Transparent. Dann solltest du die Mauseingaben erhalten.

Thema: [erledigt] Binding an StaticResources
Am im Forum: GUI: WPF und XAML

Wenn du Binding hinschreibst würde ich mal stark davon ausgehen dass dann auch ein Binding erzeugt wird. Wenn du einfach nur die Resource hinzufügen möchtest mach doch einfach sowas:


        <fk:TransitionPresenter 
          Name="ContenTransiter" DataContext="{Binding Path=BreadCrumb.CurrentFolder}" 
          Transition="{StaticResource Transition}">         
          <ContentPresenter  />
          <ContentPresenter  />
        </fk:TransitionPresenter>

Thema: [gelöst] x:Array Items mit Namen ansprechen?
Am im Forum: GUI: WPF und XAML

Soweit ich weis kannst du den einzelnen Array-Elementen keinen Namen geben. Was funktionieren könnte ist folgendes (ungetestet):


<Blabla.Resources>

<!--Hier definierst du die einzelnen Array-Elemente als objekt und gibst ihnen einen key-->
<obj x:Key="obj1">blabla</obj>
<obj x:Key="obj2">blabla</obj>
<obj x:Key="obj3">blabla</obj>


<x:Array ...>

<StaticResource ResourceKey="obj1"/>
<StaticResource ResourceKey="obj2"/>
<StaticResource ResourceKey="obj3"/>

</x:Array>


</Blabla.Resources>

So solltest du auf die Objekte sowohl als Array als auch einzeln per ResourcenVerweis erreichen. Das ganze ich aber wie gesagt nicht getestet.

Thema: Balloon-Tip Probleme
Am im Forum: GUI: WPF und XAML

Hallo,

Ich möchte für Texteingaben ein Validierungstemplate schreiben dass so ähnlich aussieht wie die Ordnernamen-Validierung von Windows (siehe Anhang). Den Balloon-Tip habe ich als Popup realisiert. Nun habe ich aber noch 2 Probleme:

1. Man kann einen Popup ein PlacementTarget geben. Das Popup öffnet sich dann auch immer über diesen PlacementTarget. Allerdings verschiebt sich das Popup nicht mit wenn das PlacementTarget verschoben wird (z.B. wenn der Benutzer das Fenster verschiebt). Wie könnte man dieses Problem lösen?

2. Ein Popup kann anscheinend nicht über einem Bildschirmrand hinausgeschoben werden. Versucht man es trotzdem landet es immer am Rand des Bildschirms auf dem (laut manueller Platzierung) die meisste Fläche zu sehen wäre.
Kann man das irgendwie abstellen? Mir wäre lieber wenn ich bereits im Vorraus ermitteln könnte ob das Popup unterhalb der TextBox noch Platz hat. Falls es nicht mehr hinpasst würde ich den Balloon lieber über der TextBox platzieren und müsste dann auch den Pfeil beim Balloon anders ausrichten. Wie mache ich das?

Thema: ScrollViewer
Am im Forum: GUI: WPF und XAML

Das liegt daran dass das StackPanel seinen Innhalt auf der Laufachse (X bei Orientation==Horizontal und umgekehrt) einfach so platziert als würde dort unendlich Platz zur Verfügung stehen.

D.h. hier konkret dass der Horizontale Scrollbalken nicht angezeigt wird da das äusserste StackPanel den ScrollViewer einfach entsprechend breit macht so dass kein Horizontales Scrollen nötig wird. Dass der ScrollViewer selbst nicht mehr ins StackPanel passt merkt das StackPanel nicht.

Ich würde dir empfehlen für deine GUI ein anderes LayoutPanel zu benutzen. DockPanel eignet sich ganz gut für wenige Elemente. Für komplexes Layout empfehle ich das Grid.

Thema: Aus "19,123" wird bei double.Parse 19123
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mach aus dem Komma einen Punkt dann gehts.

Thema: [erledigt] controls aufräumen
Am im Forum: GUI: WPF und XAML

Nein. Das einzige auf dass du achten solltest sind dass EventHandler wieder abgemeldet werden. Das führt immer dann zu Problemen wenn sich ein kurzlebiges Objekt (z.B. ein dynamisch erzeugtes Control) auf ein Event eines langebigen Objekts (z.B. Hauptfenster) anmeldet. Wenn solche Eventhandler nicht abgemeldet werden hält das langlebige Objekt weiterhin eine Referenz auf das kurzlebige was dazu führt dass dieses nicht aufgeräumt wird und weiterhin Code ausführt wenn das Event gefeuert wird. Die Folgen sind Speicher- und Performancelecks.

Das ist aber kein grundsätzliches Problem von dynamisch erzeugten Controls.

Thema: [erledigt] Das letzte Item einer Listbox verbergen
Am im Forum: GUI: WPF und XAML

StyleSelector ist das gleiche wie ein TemplateSelector nur mit Styles statt Templates.
Den kannst du in die ListBox per ItemContainerStyleSelector einklinken. Ein StyleSelector ist hier eher angebracht als ein TemplateSelector da du nur im Style die Visibility auf Collapsed setzen kannst und dass die einfachste Möglichkeit ist dein Problem zu lösen. Natürlich kannst du auch einen TemplateSelector benutzen und beim letzten Element ein leeres Template zurückgeben.

C#-Code (in welcher Form auch immer) wirst du auf jeden Fall brauchen um dieses Problem zu lösen. Aber da du für deinen Selector sowieso eine eigene Klasse machen musst zählt das ja nicht unbedingt als CodeBehind, auch wenn ein solcher Selector wohl kaum wiederverwendbar ist.

Thema: [erledigt] Das letzte Item einer Listbox verbergen
Am im Forum: GUI: WPF und XAML

Der einzige Trigger der ausserhalb eines Styles funktioniert ist der EventTrigger.

Ich würde mir für deinen Fall einen StyleSelector schreiben. Innerhalb des StyleSelectors kannst du dann prüfen ob es das letzte Element ist und dort dann einen Style zuweisen bei dem Visibility auf Collapsed gesetzt wird. Das funktioniert aber nur wenn sich die Reihenfolge deiner Items nicht ändert. Der StyleSelector wird nur aufgerufen wenn ein Item hinzugefügt wird.

Wenn dynamisch Elemente zu deiner ObsCol hinzukommen würde ich entweder ein Behavior für die Liste schreiben oder CLINQ benutzen. Mit CLINQ kannst du anhand einer ObsCol wie mit LINQ ein dynamisches ResultSet-Erstellen bei dem zu z.B. sagen kannst dass das letzte Element geskippt werden soll. Dann musst du eben deiner ListBox nicht die originale ObsCol geben sondern die gefilterte CLINQ-Liste.

Thema: Alpha-Beta Algorithmus: Wie groß ist der Overhead durch Objektorientierung?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hatte mal den Fall dass meine Anwendung immer so ~0,5sec-Hänger gehabt hat. Ursache war die Aufräumroutine des GarbageCollectors der bei über 100.000 Objekten schon mal 500ms brauchen kann.

In 99,9% aller Fälle fällt soetwas aber nicht ins Gewicht.

Thema: Binding in Style und VisualBrush
Am im Forum: GUI: WPF und XAML

Hallo Big Al,

Wenn du die VisualBrush an einen funktionierenden TextBlock gebunden hast und die Brush immer noch ein falsches Ergebnis zeigt beweist dass doch schon mal dass der Fehler nicht daran liegt dass sich der TextBlock nicht aktualisiert sondern dass die Brush nicht gezeichnet wird.

Ich habe selbst noch nicht mit WinFormHosts gearbeitet weis aber dass WPF und WinForms ihre Bildschirmbereiche so einteilen dass nur eine der beiden Technologien auf einem Bereich zeichnen kann. Wenn du also über einen WinForms-Host ein WPF-Element darstellst zieht einer der beiden den Kürzeren und wird am Bildschirm nicht aktualisiert. Da ich nicht weis ob sich deine VisualBrush und dein WinFormsControl überlappen kann ich jetzt allerdings nicht mit Sicherheit behaupten ob diese Theorie hier zutrifft.

Snoop hat bei mir übrigens auch öfters mal die Angewohnheit abzustürzen wenn die Gui-Controls zu zahlreich werden.

Thema: Binding in Style und VisualBrush
Am im Forum: GUI: WPF und XAML

Versuch doch mal mit Snoop die Elemente genau zu analysieren um herauszufinden ob es wirklich am Binding liegt oder ob sich vielleicht nur die VisualBrush nicht neu zeichnet.

Was passiert wenn du in der VisualBrush deinen TextBlock nicht erneut anlegst sondern per {Binding ElementName=textBlockImGrid} auf den bestehenden verweist der funktioniert? Löst das dein Problem?

Thema: Problem mit ComboBox-Binding
Am im Forum: GUI: WPF und XAML

Ich habe gerade herausgefunden dass es daran liegt dass der lokale DepdendencyProperty-Wert von SelectedIndex gesetzt ist. Wenn ich vom Code aus auf die ComboBoxen zugreife und ClearValue(Selector.SelectedIndex) aufrufe aktualisiert sich der Wert. Auch wenn das keine saubere Lösung ist.

Thema: wie organisiert man Source Code richtig? (MVVM)
Am im Forum: GUI: WPF und XAML

Nein.

Im Model befinden sich sowohl Methode als auch Daten für den Kunden.

Das ViewModel ist lediglich ein Adapter der es der GUI ermöglicht mit dem Model zu kommunizieren.

Aufgrund deiner Schlussfolgerung habe ich den Eindruck dass dein Verständnissproblem nichts mit MVVM oder WPF zu tun hat sondern dass du noch nicht viel Erfahrung mit der Objektorientierung im Allgemeinen hast. Vielleicht hilft es dir wenn du dir vorerst einmal einige Beispielprojekte dazu anschaust. MVVM ist nichts anderes als eine WPF-komforme Erweiterung des klassischen objektorientierten Architektur. Um MVVM zu verstehen musst du zuerst die Grundsätze der Objektorientierung kennen. Wenn du diese noch nicht verinnerlicht hast würde ich dir vorschlagen dir diese zuerst zu Gemüte zu führen.

Thema: wie organisiert man Source Code richtig? (MVVM)
Am im Forum: GUI: WPF und XAML

Ich würde für diese Überlegung nicht von UserControls aus gehen sondern mir GUI-unabhängig einmal überlegen welche Objekte du in deinem Programm brauchst. Das hat an sich noch nichts mit MVVM zu tun und wird in der Objektorientierung grundsätzlich so gemacht. Wenn dein Programm z.B. die Verkaufszahlen von einem Autohaus verwalten soll würden sich Klassen wie Auto, Verkauf, Verkäufer, Kunde ... anbieten. Dies sind deine Models. Genauso würde man es auch bei einer klassische WinForms-Anwendung oder mit anderen Technologien machen.

Die besonderheit an MVVM ist nun dass du dir für jede dieser Klassen ein ViewModel strickst welches du dann in der GUI verwenden kannst. Wie deine GUI aussieht ist unabhängig von der Anzahl der Models. Wenn du z.B. in mehreren UserControls ein Objekt vom Typ Auto anzeigen möchtest brauchst du die Auto-Klasse nicht X-Mal neu erfinden.

Thema: wie organisiert man Source Code richtig? (MVVM)
Am im Forum: GUI: WPF und XAML

Hallo Jimmy99,

Also ins Model gehört sich weder ein DataGrid, UserControl noch sonstige GUI-Elemente. Ins Model kommen lediglich die Daten die du brauchst und sämtliche Methoden die in diesem Context nützlich sind.

Dann brauchst du ein ViewModel, welches als Wrapper um das Model agiert. Dort kapselst du alle Eigenschaften via INotifyPropertyChanged und alle Methoden via Commands.

In die View kommt anschließend die GUI die ViewModels anzeigt und bearbeitet. Sie wird ausschließlich in XAML geschrieben und arbeitet per Bindings mit dem ViewModel zusammen.

Solltest du mit der Basisfunktionalität von WPF nicht auskommen und zusätzliche Funktionen (z.B. Live-Sortierung) benötigen kannst du dir entweder Behaviors schreiben und diese von deiner GUI aus verwenden oder diese Funktionalitäten mit ins ViewModel packen.

Thema: Problem mit ComboBox-Binding
Am im Forum: GUI: WPF und XAML

Hallo,

Ich habe ein kleines DatePicker-Control geschrieben mit dem man ein Datum auswählen kann. Ich weis dass es bereits einige Calendar-Controls im Internet gibt. Da ich jedoch .NET 3.5 nutze und nur eine einfache Darstellung über 3 ComboBoxen möchte habe ich selbst ein Control entworfen.

Im Control selbst sind folgende Eigenschaften als DependnecyProperties definiert:

Date (nullable DateTime)

Day
Month
Year
(sind 0 wenn Date null ist)

DayList
MonthList
YearList
(Auflistung für die ComboBox)

Im ControlTemplate definiere ich die ComboBoxen für Tag/Monat/Jahr so:


<ComboBox Name="cboDay"
SelectedItem="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Day,Mode=TwoWay}"
ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent},Path=DayList}"/>

Wenn Anfangs kein Datum gesetzt ist sind die ComboBoxen leer. Wird ein Tag ausgewählt steht der Wert im Control drin (alles passt). Wir aber das Datum auf null gesetzt habe ich das Problem dass sich die ComboBoxen nicht aktualisieren obwohl Day/Month/Year auf 0 gesetzt sind. Platziere ich im ControlTemplate einen TextBlock der diese Werte anzeigt (mit dem gleichen Binding wie bei der ComboBox) sehe ich auch 0. Nur bei der ComboBox scheint sich das Binding nicht zu aktualisieren. Wäre toll wenn jemand einen Lösungsansatz hierfür hätte.

Thema: WPF Window "zerstören"
Am im Forum: GUI: WPF und XAML

Also wenn ich dich richtig verstanden habe benutzt eine Fremdanwendung deine Library. In dieser Fremdanwendung ist ein Bug der dazu führt dass sich die Anwendung nicht beenden lässt. Und nun möchtest du in deiner Library diesen Bug beheben.

Das lässt sich so nicht sauber lösen. Wenn sich die Anwendung nicht sauber beendet dann ist das ein Problem eben dieser Anwendung. Da kannst du in deiner Library nicht viel machen. Ich würde dir raten Kontakt mit dem Entwickler dieser Anwendung aufzunehmen damit der Fehler dort beseitigt wird wo er auftritt.

Sollte das (aus welchen Gründen auch immer) nicht möglich sein kannst du folgendes Versuchen:

Greife über Application.Current auf die Anwendung zu und versuche über diesen Weg den Shutdown-Mode zu setzen.
Oder versuche die Anwendungsassembly über den .NET-Reflektor zu analysieren. Es gibt für den Reflector ein Plug-In names Reflexil mit dem du die Assembly auch verändern kannst. Evtl. kannst du damit den Bug selbst beheben. Das ist aber alles ein Hack.

Thema: WPF Window "zerstören"
Am im Forum: GUI: WPF und XAML

Vielleicht hilft es dir wenn du in deiner App.xaml den ShutDownMode so einstellst dass deine Anwendung sich mit dem Hauptfenster beendet.

Thema: FontCache deaktivieren
Am im Forum: GUI: WPF und XAML

Die Fehler sind nur pro System reproduzierbar. Je nachdem wo was am Cache kaputt ist gehen eben bestimmte Zeichen nicht. Wenn auf einem anderen System der Cache korrupt ist sind das dort aber höchstwarscheinlich ganz andere Zeichen. Auf unserem System ist die Software nur bei relativ selteten Zeichen abgestürzt. Bei anderen Systemen hatten wir das Problem dass nichteinmal unser StartScreen angezeigt wurde weil dort warscheinlich irgendein häufiges Zeichen kaputt war.

Die Ursache für den kaputten Cache kann ich leider nicht mit Sicherheit bestimmen. Laut einigen Quellem im Internet soll es daran liegen dass bestimmte Grafikkartentreiber den Chache überschreiben wenn dieser im RAM ist. Das steht auch in dem von dir genannten Link.

Auf jeden Fall sehe ich keine Möglichkeit von meiner Anwendung aus zu verhindern dass der Cache kaputt geht. Das müsste MS eigendlich selbst erkennen und gegebenenfalls korrigieren bzw. den Cache weglöschen. Stattdessen wird das Problem zum Benutzer geschoben. Um das Problem generell zu vermeiden hatte ich vor den Cache einfach gar nicht zu benutzen.

Thema: FontCache deaktivieren
Am im Forum: GUI: WPF und XAML

Wenn man ihn nicht deaktivieren kann ist das natürlich doof weil wir immer wieder solche Probleme haben werden... Normalerweise müsste WPF automatisch merken dass im FontCache irgendwas nicht stimmt und ihn dann selbst leeren.

Thema: FontCache deaktivieren
Am im Forum: GUI: WPF und XAML

Hallo Taipi88,

Das habe ich bereits gefunden. Mir geht es aber nicht darum den FontCache auf einen bestimmten PC zu löschen (das habe ich bei unserem Problem-PC bereits gemacht) sondern ihn generell in meiner Anwendung zu deaktivieren so dass es gar nicht zu solchen Problemen kommen kann.

Thema: FontCache deaktivieren
Am im Forum: GUI: WPF und XAML

Hallo liebe Community,

Ich suche eine Möglichkeit den FontCache von WPF für meine Anwendung zu deaktivieren.

Der Grund dafür ist dass sich eine WPF-Anwendung bei einem korrupten FontCache komplett aufhängt (1 Kern voll ausgelastet, GUI reagiert nicht mehr). Wir haben in letzter Zeit hin und wieder mal Bugreports bekommen bei denen sich das Fenster unserer Anwendung nicht öffnete. Stattdessen sah man nur ein schwarzes Rechteck wo das Fenster sein sollte. Die Einträge im Logfile endeten an der Stelle wo das Fenster angezeigt werden sollte. Diese Woche hatten wir das gleiche Problem an einem PC in unserer Firma. Sobald man bestimmte Fenster öffnen wollte hat sich die GUI aufgehängt. Ich habe dann solange rumprobiert bis ich rausgefunden habe dass es am Copyright-Zeichen liegt. Sobald ich dieses Zeichen aus dem Info-Fenster entfernt hatte ging es wieder. Danach habe ich herausgefunden dass sich die Anwendung auch aufhängt wenn man das Copyright-Zeichen in eine TextBox schreibt. Das ging auch mit anderen Sonderzeichen. Beim Buchstaben Ü konnte ich das reproduzieren. Ö und Ä verursachten keine Probleme.

Irgendwann habe ich dann herausgefunden dass es am WPF-Font-Cache lag. Nachdem wir diesen gelöscht hatten ging alles wieder.

Nun bin ich am überlegen wie wir zukünftig mit diesem Problem umgehen. Ich bin mir ziemlich sicher dass der FontCache das Problem für einige der Bugreports aus der Vergangenheit war. Nun würde ich dieses Problem zukünftig gerne vermeiden. Ist es irgendwie möglich den FontCache für meine Anwendung komplett zu deaktivieren so dass es gar nicht zu diesem Problem kommen kann? Hatte jemand von euch bereits einmal Probleme mit dem FontCache?

Thema: [erledigt] Binding-Error vermeiden
Am im Forum: GUI: WPF und XAML

Habe gerade ein kleines Beispielprojekt gemacht und konnte den Fehler nicht reproduzieren. Ich habe dann in meinem Projekt nochmal genauer gedebuggt und festgestellt dass in meinem ViewModel der getter eine Exception wirft wenn der Wert noch nicht belegt ist. Ursache ist eine kleine Typumwandlung. Da ich an diesem Fehler wohl selbst Schuld war wiederrufe ich meine Theorie zur fehlerhaften Pfadauflösung von Bindings. Die funktionieren jetzt alle wunderbar auch wenn irgendwo im Binding-Path der Wert null vorkommt.

Trotzdem danke für die viele Vorschläge.

Thema: [erledigt] Binding-Error vermeiden
Am im Forum: GUI: WPF und XAML

Hallo,

Das mit dem Priority-Binding bzw. FallbackValue ist nicht nötig da im Falle eines Null-Werts auch Null übertragen wird. Für den Fall dass kein Bild vorhanden ist zeigt mein PictureViewer eine Default-Grafik an:


<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=DisplayedPicture.Picture}" Value="{x:Null}">
   <Setter Property="Template">
        <Setter.Value>
               <!--Hier steht eine Default-Grafik drin-->
        </Setter.Value>
   </Setter>
</DataTrigger>

Auch in diesem Beispiel gilt: Sowohl DisplayedPicture als auch Picture kann null sein. Und auch hier wird ein Binding-Error erzeugt wenn DisplayedPicture null ist weil die Binding-Klasse versucht auf die Picture-Eigenschaft zuzugreifen was zu einer NullReference-Exception führt. In diesem Fall wird vom Binding dann auch der Wert null zurückgeliefert. Das führt dazu dass der DataTrigger wie gewollt ausgelöst wird udn die Default-Grafik einblendet.

Der Vorschlag von xxxprod scheint zu keiner NullReferenceException zu führen. Offenbar prüft das Binding intern ob die Bindingsquelle null ist. Wenn jedoch beim Auflösen des Binding-Paths irgendwo ein Wert null ist wird ein Binding-Error ausgelöst. Nur wie gehe ich beim oben genannten DataTrigger vor?
Im Code würde ich einfach folgendes hinschreiben:


if(DisplayedPicture != null && DisplayedPicture.Picture != null)
Durch die logische Und-Verknüpfung würde der hintere Teil nur ausgeführt werden wenn der vordere Teil passt. Ich habe mal versucht einen MultiDataTrigger zu verwenden um auf beide Bedingungen zu prüfen. Allerdings erlaubt es die Condition-Klasse nicht auf null-Werte zu prüfen. Das funktioniert nur mit einem einfachen Trigger.

Wäre toll wenn mir jemand helfen könnte. Ich habe heute gelesen dass die Binding-Errors ziemlich viel Laufzeit kosten: http://www.wpftutorial.net/10PerformanceTips.html