ich bin inzwischen relativ lange aus C# raus. Das letzte mal dass ich aktive C#-Entwicklung betrieben habe (abgesehen von ein wenig ASPxWebforms, was aber auch alte Technologie ist) war .net 4.5 aktuell gewesen (bin 2015 zu PHP gewechselt und inzwischen hauptsächlich im Java und Delphi-Umfeld unterwegs). Von daher bin ich definitiv nicht mehr auf dem Laufenden was aktuelle Technologien angeht. Ich wollte jetzt mal ein neues Projekt anfangen und dieses Modular aufbauen. Früher hat man für sowas dann auf MAF bzw. MEF zurückgegriffen. Wie sieht es heute aus? Was verwendet man heute für Modulare Programmierung unter WPF (werde ich auch das erste mal dann benutzen).
Und wo ich gerade schon mal hier bin, wie sieht es mit OR-Mappern aus? Ist das Entity Framework immer noch State of the Art oder gibt es dafür auch bereits einen Nachfolger, der inzwischen genutzt wird?
Würde mich freuen wenn ihr mir da ein paar kleine Tipps geben könntet, was heutzutage unter .Net 6/7 genutzt wird und modulare Anwendungen mit Datenbankanbindung umzusetzen (als Datenbank wird PostgreSQL genutzt).
Ja, das sieht man sofort anhand von HttpContext.Current.GetOwinContext() - verursacht innerliche Schmerzen ;-)
Ich würde wirklich gerne das Ding neu machen. Doch jedes mal wenn ich versuche das meinem Vorgesetzen zu erklären, heißt es immer, da haben wir keine Zeit für, machen wir nicht.
Zitat von Abt
In der ASP.NET Core Pipeline würde man das in den Notification Handlern beim RedirectProvider konfigurieren; wie das beim uralten Owin Zeug geht weiß ich nicht; aber hast wenigstens ne Idee nach was Du suchen musst.
Uff. Ich schau mal ob ich da was entsprechendes Finde. Habs mit dem Login ja auch hinbekommen.
Zitat von Abt
PS: damit loggt sich der User jedoch nur beim Anbieter aus, nicht bei euch in der App (by design, weil Token nur zeitlich ablaufen und nie "abgemeldet" werden können).
Das ist mir bewusst. Der Login von unserer Seite aus (sprich killen der Session und ähnliches) ist bereits fertig und funktioniert auch. Ich kann nur momentan den Login nicht an den Anbieter weiterleiten, der ja denke ich auch gerne wissen möchte, dass der User sich ausgeloggt hat.
ich hab da ein kleines Problem. Und zwar bin ich gerade dabei von einer unserer Seiten den Login auf OIDC umzustellen. Dafür habe ich mich an folgendes Tutorial gehalten:
Ich habe die Credentials an den Keycloakserver von unserem Anbieter angepasst und der Login funktioniert auch einwandfrei, jedoch der Logout funktioniert dann nicht mehr. Sobald ich den Logoutbefehl sende, bekomme ich folgende Fehlermeldung:
Fehler
Es ist ein Fehler aufgetreten
Fehlender Parameter: id_token_hint
Diese Fehlermeldung steht dann direkt auf der Seite vom Anbieter wo der Logout stattfinden soll. Ich kann damit leider überhaupt nix anfangen was das überhaupt für ein Parameter ist den er da haben will, geschweige denn wie man ihn übergibt. Hier noch der Logoutcode den ich verwende:
ich bin was C# angeht von den Kenntnissen leider sehr sehr veraltet, da ich seit 2014 fast gar nicht mehr mit C# (nur noch ein bisschen ASPX) arbeite und auch vorher nur WinForms gemacht habe. Das Thema WPF ist für mich ein absolutes Buch mit 7 Siegeln und das würde ich gerne einmal ändern.
Daher bin ich auf der Suche nach einem guten Buch / Kurs / Tutorial mit welchem ich WPF von Grund auf lernen kann. Was ich bereits gefunden habe sind einige Kapitel im C#-Buch von Rheinwerk, doch die kostenlose Variante ist auf dem Stand von Visual Studio 2012 und von daher gibt es mit Sicherheit aktuelleres. Die Aktuelle Ausgabe des Buches möchte ich mir bei dem Preis 50 Euro aber auch nicht kaufen, wenn es vielleicht bessere Werke zu dem Thema gibt (die idealerweise auch etwas weniger kosten).
Daher wollte ich mal fragen, ob jemand von euch für mich nen Tipp hat, was ich mir da mal zulegen sollte. Wichtig ist mir dass wenn es ein Buch ist, dass es ein EBook ist (idealerweise sogar wie die Rheinwerk-Onlinebücher im HTML Format), so dass ich bequem auch mal nach Schlagworten suchen kann. Am liebsten wäre mir aber tatsächlich ein Videokurs (Linkedin-Learning hat leider keine für WPF, wenn ich WPF eingebe, bekomme ich immer nur irgendwelche Was ist neu Videos angezeigt).
Natürlich muss das ganze nicht kostenlos sein, allerdings bin ich auch nicht bereit mehr als 50 - 60 Euro auszugeben, da ich das für mich selbst mache und das ganze so aus privater Tasche selbst zahlen muss.
Das erste mal C# ist bei mir inzwischen auch 10 Jahre her (damals in der Berufsschule) und es war dann bis 2014 auch meine Primäre Programmiersprache. Danach bin ich dann ins PHP-Umfeld gewechselt und arbeite jetzt seit 3 Jahren wieder in sehr kleinem Rahmen mit C# (um genau zu sein das alte ASPX). Meine Primäre Programmiersprache ist inzwischen aber Delphi, da dies die Programmiersprache ist, in welcher bei uns im Unternehmen hauptsächlich gearbeitet wird.
Es war in der Tat recht einfach. Der größte Aufwand insgesamt war das Kopieren der Sourcen aus dem alten in das neue Projekt. Anschließend musste ich nur noch ein paar kleine Änderungen vornehmen, da das Settings-Konzept aus .Net-Framework in .NET nicht existiert (Settings.Default). Aber ansonsten war es überhaupt kein Problem. War halt pure Fleißarbeit (hätte meines erachtens sogar bis auf die paar Anpassungen im Code selbst sogar ein Praktikant hinbekommen müssen).
ich hab da ein kleines Problem. Und zwar habe ich ein Projekt welches noch das .Net-Framework 4.7.2 verwendet. Jetzt benötige ich aber eine Funktion die es erst ab .Net 5 gibt. Daher habe ich mir jetzt die aktuellste Version des .Net-Frameworks geholt und wollte in den Projekteinstellungen das Upgrade vornehmen (Es gibt keine Nuget-Pakete). Allerdings steht mir in der Auswahl nur maximal 4.8 zur Verfügung. Wenn ich allerdings ein neues Projekt erstelle, kann ich 6.0 problemlos auswählen.
Kann mir vielleicht irgendjemand sagen, wie ich das Projekt upgegradet bekomme, ohne dass ich das Projekt wegschmeißen muss? Es handelt sich um ein WinForms-Projekt (ich hasse dieses XML-Geschreibsel von WPF und mags bei UI lieber klickibunti).
Deine Lösung hätte mir in diesem Fall nix gebracht, da sich die DataSources ja in den ASPX-Dateien befunden haben. Im Code-Behind mache ich es genauso wie du auch gesagt hast. Da erstelle ich direkt eine Connection. Nur funktioniert die halt nicht im "Frondend". Da muss man mit der Factory arbeiten (zumindest wenn ich das jetzt richtig verstanden habe). Und das eintragen der Factory in der web.config hat ja auch die Lösung gebracht. Jetzt läuft das System fast einwandfrei. Ich muss lediglich noch ein paar letzte Querys umschreiben, welche mit Postgresql nicht kompatibel sind (sprich aus getdate() current_date machen und sowas).
EDIT: Falls übrigens sonst noch mal jemand über das Problem stolpert. Folgendes Snippet muss in die web.config:
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
</DbProviderFactories>
</system.data>
Jup. Die Anwendung ist knapp 15 Jahre alt. Da es aber halt nur ne einfache Informationsplattform ist, bekomme ich auch keine Kapazitäten dafür das Ding komplett neu zu machen (vor allem da ASP auch nicht mein Spezialgebiet ist). Über die eingedeutschten Fehlermeldungen bin ich regelmäßig am Fluchen, leider ist das ein Firmenrechner, auf dem halt alles vorinstalliert war. Das mit der Providerfactory werd ich mal ausprobieren.
Tatsächlich hab ich bisher gar keine Anleitung für den Provider gefunden. Hab halt geschaut welchen Provider ich über Nuget registrieren muss und habs dann einfach durch ausprobieren umgesetzt. Hat bisher auch sehr gut geklappt. Nur an dieser Stelle bin ich dann leider hängen geblieben.
Ich probier das jetzt mal über die ProviderFactory und melde mich dann noch mal obs funktioniert hat oder nicht.
EDIT: Scheint funktioniert zu haben. Zumindest bekomme ich jetzt ne PostgresException, dass ich nen Syntaxfehler habe (was wie im Startpost schon geschrieben habe daran liegt, dass ich die Queries selbst noch nicht angepasst habe.
ich bin gerade dabei unser "Intranet" (eigentlich ist es nur eine kleine Webseite wo News stehen und man sich für Veranstaltungen anmelden kann) von MSSQL auf Postgresql umzustellen (wir ziehen gerade sämtliche Projekte auf ein einheitliches Datenbanksystem, vorher hatten wir Postgresql, MSSQL und MySQl) und stoße dabei ein ein sehr merkwürdiges Problem
Wenn ich ganz normal über die Code-Behind-Datei versuche eine Datenbankabfrage zu machen funktioniert alles einwandfrei. Ich kann die Daten abrufen und bekomme auch ein ergebnis. Versuche ich das aber über die ASPX-Seite mittels einer SQLDataSource dann bekomme ich folgende Fehlermeldung:
Fehler
[ArgumentException: Der angeforderte .Net Framework-Datenprovider kann nicht gefunden werden. Er ist ggf. nicht installiert.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +157
System.Web.UI.WebControls.SqlDataSource.GetDbProviderFactory() +66
System.Web.UI.WebControls.SqlDataSource.GetDbProviderFactorySecure() +22
System.Web.UI.WebControls.SqlDataSource.CreateConnection(String connectionString) +12
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +95
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
DevExpress.Web.Internal.DataHelper.PerformSelect() +203
DevExpress.Web.Internal.GridDataHelper.PerformSelect() +285
DevExpress.Web.Internal.DataContainer.PerformSelect() +136
DevExpress.Web.ASPxDataWebControlBase.DataBindCore() +13
DevExpress.Web.ASPxDataWebControlBase.DataBindInternal() +109
DevExpress.Web.ASPxWebControl.DataBind() +37
DevExpress.Web.Internal.DataHelperBase.EnsureDataBound(Boolean ensureChildControls) +59
DevExpress.Web.Internal.DataContainer.EnsureDataBound() +142
DevExpress.Web.ASPxDataWebControlBase.OnPreRender(EventArgs e) +22
System.Web.UI.Control.PreRenderRecursiveInternal() +166
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4712
In der web.config ist der Server aber korrekt hinterlegt (wie schon gesagt, über die Code-Behind funktioniert es auch). Habe ich irgendwie noch ein Assambly vergessen, welches ich über Nuget installieren muss, bzw. muss ich in der Web.config noch irgendwas zusätzlich konfigurieren?
Derzeit habe ich als Verbindung zur Datenbank lediglich folgendes in der Web.config stehen:
Nicht wundern, dass bei den Commands nur query steht, die wirklichen Querys habe ich rausgenommen, damit das ganze etwas übersichtlicher wird (vor allem funktionieren die auch gar nicht, da die noch nicht auf postgres umgeschrieben wurden.
Kann mir da wohl vielleicht irgendjemand bei meinem Problem weiterhelfen? Mir fällt nämlich so langsam nix mehr ein.
Was auch ganz Praktisch wäre, wäre eine Möglichkeit PMs direkt in der Übersicht löschen zu können (gerne auch mehrere auf einmal). Momentan muss man bei jeder PM erst mal in die PM rein um sie zu löschen (es sei denn ich bin Blind und hab die Funktion nicht gefunden).
Jup. Viele Chefs kapieren es leider nicht dass es auch nachteile hat bestehende Systeme nicht zu modernisieren. Ich hätte das Portal gerne komplett neu gemacht, allerdings bekomme ich dafür nicht die Zeit. Chef ist der Meinung es läuft doch und das reicht. Da kann man auch nicht mit ihm drüber reden. Und zum Thema überholt. Die Hauptsoftware die von meinen Kollegen und mir Entwckelt wird (reine Inhouseapplication) ist knapp 20 Jahre alt und basierte bis Mitte letzten Jahres noch auf Delphi 7.
ich hab da ein kleines Problem. Und zwar habe ich eine relativ alte ASPX-Webseite, welche ich betreuen muss (zum Neumachen fehlt leider die Zeit). Ich bekomme dabei immer mal wieder folgende Exception in meinen Fehlerlog rein:
Fehler
System.ApplicationException: Response.Redirect kann in einem Page-Rückruf nicht aufgerufen werden.
bei System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent)
bei System.Web.HttpResponse.Redirect(String url)
bei Namespace.Klasse.Page_Load(Object sender, EventArgs e) in C:\Pfad\Klasse.aspx.cs:Zeile 39.
bei System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
bei System.Web.UI.Control.OnLoad(EventArgs e)
bei System.Web.UI.Control.LoadRecursive()
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Bei der entsprechenden Zeile handelt es sich um einen Redirect auf die Login-Seite, wenn die Session des Benutzers abgelaufen ist. Leider passiert es immer mal wieder das der Benutzer sehr lange auf der Seite bleibt und dann versucht mit abgelaufener Session eine Funktion aufzurufen, welche einen Postback macht. Da tritt dann diese Fehlermeldung auf. Ich habe es sowohl mit Response.Redirect als auch mit Server.Transfer versucht, bei beiden kommt die Fehlermeldung.
Hier auch mal eben die Zeilen 37 - 40:
if (Session["userid"] == null)
{
Response.Redirect("Default.aspx");
}
Hat jemand von euch einen Rat für mich wie ich den User auch bei einem Postback auf die Loginseite schicken kann?
nope wir sind nicht auf Azure und das wird unsere Geschäftsleitung auch nicht zulassen. Wir verwenden außer für diese eine Application überhaupt keine Microsoft-Assoziierten Sprachen oder Dienste die nicht von uns selbst gehostet werden.
Von daher kommt die Keyvault sowieso nicht in Frage. Bei der Application handelt es sich lediglich um unsere Kundenportale (für jede Firma des Konzerns eines). Alleine dadurch wäre eine eigene API schreiben mit Kanonen auf Spatzen zu schießen. Wir haben unser eigenes Rechenzentrum und die Server stehen direkt nebeneinander. Sprich die Latenzen sind so gering, dass die zusätzlichen Datenbankzugriffe keine wirkliche Auswirkung haben werden.
Hört sich nicht gerade nach einem ordentlichen Entwicklungsprozess an, wenn ihr quasi so eine Änderung ohne Update (und daher ohne Quellcodeverwaltungsystem?) hinbekommt ;-)
Ich glaub da hast du mich falsch verstanden. Natürlich muss ich die Änderung mit einem Update machen. Es geht nur darum dass die Datenbankverbindungen jederzeit ohne Update geändert werden können müssen (sprich ein Austauschen der Connectionstrings). Natürlich arbeiten wir mit Versionierung (SVN).
Da gebe ich dir absolut recht. Ich werd das ganze jetzt auch vernünftig umbauen. Eine statische Verwaltung will unser PO nicht, aber wir handeln dass jetzt über eine zentrale Datenbank auf die immer zugegriffen wird, welche dann den ensprechenden Connectionstring zurückgibt. Ist zwar auch nicht optimal, aber die einzige Lösung die mir einfällt OnTheFly die Zugangsdaten der Datenbankserver ändern zu können ohne die Application an sich zu updaten.
Der Connection String kann dynamisch sein, wenn man die Datentrennung pro User / Tenant auf physikalischer Ebene umsetzt. Da hilft einem die Config nicht.
Das ist in diesem Fall auch so. Wir haben eine Application die je nachdem welche Domain aufgerufen wird einen anderen Datenbankserver aufruft. Von daher bringt uns die Config nichts.
Zitat von Abt
Sicher ist jedoch, dass die Art und Weise nur krachen kann und ein grober Programmierfehler ist:
Sessions sind kein statischer Speicher sondern laufen aus. Sie also für ein statisches Feld zu nutzen ist ein richtig dicker Patzer.
nur eine Frage der Zeit, bis die Session hier Null ist und damit bei einem Zugriff eine NullReferenceException geworfen wird..
Und das ist das merkwürdige. Die Session wird automatisch auf der Loginseite gefüllt. Sprich auf der Seite auf der man zuvor war. Sprich die befüllung ist nicht mal eine Minute vorher. Liegt das daran dass Sessions in ASP.Net unzuverlässiger sind als in PHP? Weil anders kann ich es mir nicht vorstellen, dass ein und der selbe Code nach dem Neustarten der Application wieder funktioniert.
Aber ja, dann werde ich wohl mal die Zeit investieren müssen und das System komplett umbauen (ich hoffe dass ich sie bekomme). Das ist leider etwas dass sich durch die komplette Application zieht und von meinem Vorgänger so implementiert wurde. Hoffen wir mal dass ich das Zeitkontingent dafür bekomme.
es hat leider bis heute gedauert bis die Seite mal wieder komplett abgeschmiert ist und jetzt habe ich auch endlich eine vernünftige Fehlermeldung über den Server bekommen. Nur wirklich weiter bringt diese mich nicht.
Die Meldung lautet:
Fehler
[NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.]
Die Codezeile die mir dabei angezeigt wird ist folgende:
public static string connetionStringtestdb = System.Web.HttpContext.Current.Session["connectionstring1"].ToString();
Die Session wird direkt beim Betreten der Seite gesetzt und funktioniert auch. Auf der Hauptseite bekomme ich nämlich keine Fehler obwohl er sachen aus der Datenbank ausliest.
Der Fehler tritt erst nach dem Login auf. Nachdem ich jetzt den Applicationpool neugestartet habe funktioniert es auch wieder. Ich bin da gerade etwas ratlos woran das liegen kann (vor allem da ich wie schon gesagt das Projekt auch nur zwangsweise übernommen habe).
ich hoffe hier kann mir jemand weiterhelfen. Meine ASP-Kenntnisse sind nur rudimentär und reichen gerade mal dazu aus unsere Seite weiterzuentwickeln (ich bin zu der Aufgabe wie die Jungfrau zum Kinde gekommen, da der Kollege, der das Ding ursprünglich entwickelt hat gekündigt hat und ich der einzige bin, der zumindest in der Ausbildung mal mit ASP in Berührung gekommen ist).
Und zwar habe ich momentan das Problem dass ständig die Webseite komplett abschmiert. Sprich die Seite kann noch aufgerufen werden, doch sobald man versucht sich einzuloggen landet man auf der Fehlerseite weil irgendeine Exception geworfen wird, ich weiß aber nicht welche, da das Problem bei mir local nicht auftritt und die Exceptions vom Server unterdrückt werden.
Das einzige was dann noch hilft ist den kompletten Applicationpool einmal neu zu starten. Hat vielleicht irgendjemand von euch eine Ahnung woran das liegen könnte? Weil ich hab davon nicht die geringste Ahnung und weiß nicht einmal wonach ich da suchen muss. Wenn jemand von euch ein paar Tipps hat, wonach ich mal schauen könnte um das Problem zu lokalisieren wäre ich euch schon sehr dankbar.
Wie schon gesagt, ich hab seit fast 10 Jahren kein ASP mehr wirklich gemacht und stümper hier momentan nur rum um das Ding überhaupt betreuen zu können. Ich bin inzwischen eigendlich eher im Bereich Java und Delphi aktiv. Von daher würde ich mich über ein paar Tipps sehr freuen.
OK, Fehler ist behoben. Die Antwort ist ganz einfach. Meine Projektmappe beinhaltet 4 Projekte. Das Assembly habe ich in das Projekt eingebunden, welche das Assembly nutzt. Allerdings da es sich um ein Erweiterungs-Assembly handelt muss dieses auch noch in das Projekt eingebunden werden, welches als Startprojekt angegeben ist. Solange das nicht passiert, crasht das System.
Lokale Kopie steht per Default beim Projekt auf True. Ich habs aber auch schon versucht abzuschalten, bringt aber auch nichts. Der Pfad, auf den die Assembly verweist ist folgender:
ich hab gerade ein etwas merkwürdiges Problem. Ich versuche momentan gerade ein Event auf ein Command umzuleiten um das Event im ViewModel behandeln zu können. Darum habe ich das Assembly System.Windows.Interactivity im Projekt eingebunden und im XAML den entsprechenden Namespace angelegt.
Er kann im Designer die Assembly auch finden und zeigt mir auch die entsprechende Intillisence an. Wenn ich jetzt aber versuche das Projekt zu starten, bekomme ich folgende Fehlermeldung:
Fehler
Die Datei oder Assembly "System.Windows.Interactivity, PublicKeyToken=31bf3856ad364e35" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
Die Assembly ist allerdings im Projekt referenziert (hab nachgeschaut) und im XAML hab ich sie wie folgt eingebunden:
Ich steh hier gerade etwas auf dem Schlauch, da das nur passiert wenn ich versuche das Projekt zu starten. Wenn ich die Projektmappe komplett neu erstellen lasse, bekomme ich keine Fehler angezeigt. Der Fehler wird mir auch nicht im Fehlerbereich von Visual Studio angezeigt sondern nur sobald ich versuche das Projekt zu starten.
Die Fliegt auch noch raus. Ist momentan nur ne Übergangslösung, da die Daten derzeit noch über die ObservableCollection kommen. Das wird aber noch umgestellt und dann fliegt auch die ObservableCollection raus.
ich hab da gerade ein kleines Problem und stehe auf dem Schlauch. Vielleicht könnt ihr mir da ein wenig weiterhelfen.
Und zwar habe ich eine ListView, welche ich mit Daten fülle. Die Daten werden auch angezeigt, wenn ich dann allerdings versuche ne Filterung zu bauen, habe ich das Problem, dass das ItemsSource-Property der ListView wenn das DataContextChanged-Event feuert noch null ist. Ich hab mal geschaut ob in ItemsSource überhaupt was drin ist und wenn ich im SelectionChanged-Event nen Breakpoint setze ist ItemsSource auch gefüllt.
Nun zu meiner Frage. Welches Event nutze ich am besten um die CollectionView für die ListView zu definieren (da DataContextChanged ja scheinbar zu früh ist).
Hier der Code so wie ich ihn derzeit habe:
View:
<ListView Grid.Row="1" Name="lv_Leistungserbringer" DataContextChanged="lv_Leistungserbringer_DataContextChanged" SelectionChanged="lv_Leistungserbringer_SelectionChanged" ItemsSource="{Binding Path=Leistungserbringer}" Height="150" VerticalAlignment="Bottom">
<ListView.View>
<GridView>
[...] <!-- Hab die Columns mal rausgenommen wegen Platz-->
</GridView>
</ListView.View>
</ListView>
CodeBehind:
private void lv_Leistungserbringer_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lv_Leistungserbringer.ItemsSource);
view.Filter = this.Filter;
}
private bool Filter(object item)
{
if (String.IsNullOrEmpty(tb_Search.Text))
return true;
else
{
int test;
int.TryParse(tb_Search.Text, out test);
if (test == 0)
return ((item as ILeistungserbringer).Beschreibung.IndexOf(tb_Search.Text, StringComparison.OrdinalIgnoreCase) ≥ 0);
else
return ((item as ILeistungserbringer).ID.ToString().IndexOf(tb_Search.Text, StringComparison.OrdinalIgnoreCase) ≥ 0);
}
}
Das Binding der Source läuft über ein ViewModel ab, welches an den DataContext gebunden wurde.
Kann mir da vielleicht jemand nen Anstoß geben wo ich da ansetzen muss?
Klar ist das möglich. Du benötigst lediglich nen Bool oder was auch immer, den du abfragen kannst. Dann kannst du ganz normal den Bool mit nem DataTrigger (oder auch MultiDataTrigger) abfragen und für die entsprechende Row die Hintergrundfarbe ändern.