Laden...
M
Benutzerbeschreibung
Visual Studio 2012 C# !NET Framework 4 - FÜR WINDOWS XP UNTERSTÜTZUNG! WPF, DataBinding (einschichtig) über Entity Framework, SQL-Server 2000-2012

Forenbeiträge von m.grauber Ingesamt 343 Beiträge

19.07.2011 - 17:05 Uhr

Hallo unconnected,

vielen Dank für diesen Tipp!


ObservableCollection<Kunden> Col1 = new ObservableCollection<Kunden>(){k1}; 

Das funktioniert bei mir aber nur, wenn k1 "static" ist.

Nun kann ich daher PropertyChanged von k1 abonnieren. Leider feuert es aber nicht (trotz INotifyPropertyChanged + PropertyChangedEventHandler + InvokePropertyChanged in der Entitätsklasse "Kunden"). (Liegt dies am static?)

Vielen Dank!

Hallo Gü,

die lokale Klasse k1 habe ich aus der Entität erstellt:


public static Kunden k1 = new Kunden();

daher sollte sie auch das in Kunden implementierte INotifyPropertyChanged ebenfalls implementieren.?. Zumindest kann ich es ja an dieser Stelle nicht nochmals zusätzlich angeben.

Die Entität Kunden ist mein "direkter Link" in die Datenbank.

Die lokale Klasse k1 muss ich nur erstellen, damit ich k1.PropertyChange abonnieren kann. Beim Ändern z. B. des Kundennamens soll dieses gefeuert werden.

19.07.2011 - 16:59 Uhr

Hallo Gü,

INotifyPropertyChanged ist bereits bei der Entität implementiert. Jedoch will ich nicht das direkte PropertyChanged der Entität ("Kunden"), sondern das PropertyChanged meiner lokalen Klasse ("k1") abonnieren.

Daher versuchte ich


public Kunden k1 = new Kunden(); 

was ja zwar geht, von dem ich dann aber leider scheinbar keine ObservableCollection erzeugen kann.

Wenn ich eine ObservableCollection direkt von der Entität erstelle, kann ich andererseits aber wieder nicht das PropertyChanged abonnieren. X(

Seltsamerweise hat der Tip von unconnected wirklich funktioniert; leider kann dort zwar das PropertyChanged nun korrekt abonniert werden, löst aber trotzdem nicht aus? X(

Grüße

19.07.2011 - 16:30 Uhr

Hallo Gü,

danke für die schnelle Antwort!

Zu Punkt 5: ich konnte keine Fehlermeldung schreiben, da Intellisense sich schon weigerte, die Klasse in die ObservableCollection zu schreiben. Deshalb habe ich keine angegeben und den Code wie gedacht direkt im Browser eingetippt. Zukünftig achte ich bei Fehlern besonders darauf.

Habe leider noch nicht das neuste EF (u. a. wegen vorhandener Installationen und weil ich mit der dt. Version vom VS arbeite. Das Languagepack ist noch nicht fertig)

Über die Neuerungen komme ich aber leider trotzdem nicht zum Ergebnis. X(

Wie kann ich es trotzdem anders schaffen? ** Dann arbeite ich eben mit einer ObservableCollection direkt von der Entität. ** CollectionChanged kann ich abonnieren, es feuert aber leider nicht direkt beim Ändern eines Feldes (z. B. tippen), sondern leider nur beim Hinzufügen von neuen Items.

**
Wie kann ich trotzdem das PropertyChanged der Entität in der ObservableCollection abonnieren? (Nicht das PropertyChanged der Original-Entität)**

Oder kann ich notfalls irgendwie direkt etwas am Binding abfangen? Dort steht im Datagrid (Kundenname ist das Feld mit dem Kundennamen, das bei einer Änderung über PropertyChanged meinen eigenen Code auslösen soll):


... Binding="{Binding Path=Kundenname, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

Vielen Dank!

19.07.2011 - 15:34 Uhr

Hallo Profis,

bitte nicht gleich zerfetzen X(. Ich stehe mal wieder total auf dem Schlauch und habe eine wirkliche dumme Anfängerfrage.

"Kunden" ist eine im Programm existierende Entität.

In einer Klasse mache ich folgendes:


public Kunden k1 = new Kunden();

Das klappt. Nun soll in der nächsten Zeile der Klasse eine ObservableCollection davon erstellt werden:


public ObservableCollection<k1> Col1 = new ObservableCollection<k1>();

Das klappt nicht. Was mache ich hier falsch? 🤔 Bei einer selbst erstellten Klasse kann ich doch auch problemlos eine ObservableCollection davon erstellen! Und von der Entität "Kunden" kann ich auch eine ObservableCollection erstellen.

Eine Klasse selbst zu erstellen ist in diesem Fall nicht möglich, da ich dann beim Speichern kein SaveChanges() aufrufen kann.

Eine ObservableCollection von "Kunden" will ich auch nicht erstellen, da k1.PropertyChange später abonniert werden soll - und das soll sich nicht generell auf die Entität "Kunden" auswirken.

Bin für jede Hilfe dankbar!

27.06.2011 - 14:55 Uhr

Hallo,

ich habe eine Methode mit Parametern, die übergeben werden soll und nur bei Bedarf gestartet werden soll:


public bool Test(bool Test1, bool Test2)
{
...
}

Wie kann ich die Methode übergeben und dann bei Bedarf starten?

1. Ich benötige dazu ein Feld, welches den Verweis auf die Methode speichert. Doch von welchem Datentyp muss das sein❔


private Object Testmethode = null;

2. Wie starte ich die Methode dann?


Object.RaiseEvent(new RoutedEventArgs(Testmethode.Raise(true,true)));

Ich stehe momentan leider vollkommen auf dem Schlauch! 🤔

Vielen Dank!

20.06.2011 - 11:05 Uhr

Hallo Winsharp,

Du bist der Größte! 👍 Ich zitiere Dich:

Ah - danke.
Das löst das Problem.

Tausend Dank! 😁 Das hat mich schier verzweifeln lassen. Auch finde ich es toll, wie hier im Forum das erlangte Wissen weitergegeben wird. Ich hoffe, in einiger Zeit auch einmal so helfen zu können.

Gruß

17.06.2011 - 16:52 Uhr

Hallo Profis,

eine dependency property (typ datetime) wird mit einem Datetimewert {04.01.1900} (Monat ist der 04.) korrekt befüllt (geprüft im Debugger).

Durch eine Bindung an ein DatePicker wird an einer nicht sichtbaren Stelle der Monat im Datepicker.Text urplötzlich mit dem Tag vertauscht {01.04.1900} (geprüft im Debugger). (Scheinbar durch .NET automatisch, weil dazwischen kein Code mehr weiterläuft und geändert habe ich das Datum selbst nicht.)

Datepicker.Text ist twoway gebunden an die dependency property.

Hatte jemand bereits dieses Problem?

Evtl. liegt es daran, dass der DatePicker und die dependency property in einer externen DLL assembly liegen, die aus dem Hauptprogramm heraus aufgerufen wird.

Ich vermute, dass es an unterschiedlichen Culture-Einstellungen liegt? (Aber alles bereits geprüft (Eigenschaften des Projekts & der Assembly: Deutschland (Deutsch)), StringFormat im DatePicker habe ich auch schon gesetzt.

Langsam springe ich aus dem Fenster. Ich weiß nicht mehr weiter. 🙁

Grüße!

17.06.2011 - 16:39 Uhr

Hallo Muro und Chriscolm,

danke vielmals für Eure Tipps! 👍 👍 Hat jetzt wirklich lange bei mir gedauert. 😭 Ich habe es erst mit dem Wrapper versucht, aber irgendwie nicht hinbekommen.

Der Converter ist auch eine sehr gute Idee. Isoliert hat es damit geklappt (natürlich noch ConvertBack dazu und leicht anpassen).

Leider arbeite ich mit einem vererbten DatePicker aus einer anderen dll und dadurch wird es etwas komplizierter und ich hänge noch an einer anderen Stelle.

Im Verhalten von DatePicker=null und Datepicker=DependencyProperty.UnsetValue habe ich kein Unterschied feststellen können. Welchen davon sollte man verwenden?

Danke!

Grüße

15.06.2011 - 11:17 Uhr

Hallo,

überall sind Workarounds zu lesen, wie man den Text "Datum auswählen" kompliziert ausblenden kann.

Mein Problem ist hoffentlich einfacher, aber ich weiß nicht wo ich anfangen soll:

In der SQL-DB ist das Feld fürs Datum vom Typ Datetime (not null) und kann von mir auch nicht geändert werden. Daher befindet sich auch in der entsprechenden Klasse der Wert 01.01.1900 (und soll es auch bleiben).

Im WPF-DatePicker soll statt des 01.01.1900 immer ein leerer Wert angezeigt werden und wenn ein Datum herausgelöscht wird (im Datepicker auch leer bleiben), aber der 01.01.1900 in die Datenbank geschrieben werden. Das WPF-DatePicker ist per Binding gebunden.

Setze ich wenn der Text="" im SelectedDateChanged ist, manuell in der Klasse den 01.01.1900, dann wird das zwar gemacht, jedoch wird dieser Wert durch das Two-Way-Binding sofort wieder im DatePicker angezeigt. 🙁

Wo und wie kann ich hier ansetzen? 🤔

Vielen Dank!

10.06.2011 - 14:32 Uhr

Hallo Gü,

das ist ja einmal ein Super-Konzept ähnlich wie beim Lazy Loading.

Also nochmals vielen Dank! 👍

10.06.2011 - 12:52 Uhr

Hallo Herbivore und gfoidl,

nochmals vielen Dank für die superschnelle und exakte Hilfe! 👍 👍 Bei so etwas wusste ich nicht einmal, wonach ich suchen sollte.

Die Lösung per Reflection gelang tip-top und ich werde es erst einmal so belassen, wenn die Geschwindigkeit in diesem Fall nicht so problematisch sein sollte. PropertyInfo habe ich vorerst nicht genutzt, da ich im wirklichen Code mehrere unterschiedliche Member durchgehen und setzen muss.

Danke auch noch für den Tipp mit dem ElementSelector. Bei Laufzeitproblemen, werde ich mich darin einmal einarbeiten.

Bislang dachte ich auch, dass Erweiterungsmethoden den Code "belasten", und dann bei jeder Verwendung des entsprechenden Objekts den Speicher füllen und die Instanziierung verlängern. Wenn das aber nicht so ist, werde ich sie zukünftig häufiger einsetzen. Mal sehen, wie ich mit den vielen Begriffen beim Autocomplete zurecht komme. 😉

Grüße!

10.06.2011 - 12:13 Uhr

Hallo Herbivore,

Vielen Dank! Aha, per Reflection. Die Properties, die ich ansprechen möchte übergebe ich als Parameter als "string"?

Und dann mit GetType().GetProperty("Feld")?

Ich dachte, man sollte Reflection aus Gründen der Geschwindigkeit vermeiden; ich gehe in diesem Fall eine Schleife durch, wo sich dies nachteilig erweisen könnte.

Das ist schon einmal ein guter Lösungsansatz. Kann man das noch ohne Reflection lösen oder zumindest die Reflection in der Methode nur einmal vornehmen und ab diesen Zeitpunkt in der Schleife dann mit lokalen Variablen arbeiten?

Vielen Dank!

10.06.2011 - 12:07 Uhr

Hallo Michael,

vielen Dank für Deine schnelle Hilfe!

Ja, das ist auch als Extension Methode machbar, jedoch möchte ich, wenn es geht, in diesem Fall darauf verzichten, da ich diese Methode nicht zu oft benötige und ich sonst irgendwann im Projekt sehr viele Extension Methods habe.

Mein Problem ist der Zugriff im Inneren der Methode:


if (item.[mykey]==suchguid)

mit item.[mykey] soll ja entweder
meinecollection.feld oder mycollection.field zugegriffen werden. Nur woher weiß C#, dass ich mit dem Parameter "mykey" den Inhalt des Members der Collection meine? Wie lautet dort die korrekte Syntax?

Gleiches gilt bei der Zuweisung:


item.[mykey]=myguid

Damit soll myguid in meinecollection.feld oder mycollection.field geschrieben werden.

Wie ist das machbar?

Danke!

10.06.2011 - 11:26 Uhr

Hallo Profis,

ich habe mehrere Collections mit UNTERSCHIEDLICHEN Membernamen:

meinecollection1 (Member: guid id, string feld)
mycollection2 (Member: guid ident, string field)
usw.

Wie kann man per Methode eine beliebige ObservableCollection und ein beliebiges Feld (aus dieser Collection) und beliebigen Wert übergeben damit die Methode für jede ObservableCollection den entsprechenden Code ausführt und die jeweiligen Felder nutzt?

Aufruf dann z. B. mit:
Test (meinecollection1, feld, guid.empty)
bzw.
Test(mycollection2, field, guid.empty)


public static void Test (IEnumerable<T> mylist, object mykey, guid suchguid, guid myguid)
{
  foreach (var item in mylist)
  {
     if (item.[mykey]==suchguid)
        item.[mykey]=myguid
    // Das klappt natürlich nicht, aber wie ist die richtige Syntax?
    // in "meinecollection" soll das Feld "feld" durchsucht werden und mit der
    // myguid beschrieben werden
    // in "mycollection" soll das Feld "field" durchsucht werden und mit der myguid 
    // beschrieben werden
  }
}

Mit einem Interface kann ich es nicht machen, da die Member in allen Klassen anders benannt sind und diese Klassen von mir auch nicht verändert bzw. erweitert werden dürfen. 🙁

Wie kann ich diese Methode trotzdem allgemeingültig formulieren? 🤔

Vielen Dank!

10.06.2011 - 10:19 Uhr

Hallo Winsharp und TomLeech!

danke nochmals für Eure Hilfe! 👍 👍

Ihr habt mich auf den richtigen Weg gebracht.

Grüße

06.06.2011 - 15:05 Uhr

Hallo Winsharp,

Danke! Ich stehe wirklich total auf dem Schlauch! 🙁

In der Hilfe zu HierachialDataTemplate.ItemsSource ist immer nur dieses Beispiel mit unterschiedlichen Objekten "Divisions" und "Teams" angezeigt. Bei mir referenzieren die Objekte jedoch auf die gleiche Liste und können "unendlich" verschachtelt werden. Zudem fehlt dort auch die Definition der Listen. Das Beispiel scheint nur 2 fixe Ebenen zu haben "Divisions" und "Teams" und mehr geht dort nicht.

Wenn ich jedoch


public ObservableCollection<Entry> Children { get; private set; }

definiere, muss ich ja auch das entsprechende Children dort hineinschreiben? Mein Problem ist nur: In der Tabelle habe ich ja immer nur die ID´s (vom Typ Guid - hier der einfachheit halber mit numerischen Werten🙂.

ID=1, ParentID=0, Name="Ebene 1"
ID=2, ParentID=1, Name="Ebene 2 - Eintrag1"
ID=3, ParentID=1, Name="Ebene 2 - Eintrag2"

Nachdem was ich bisher gelesen habe, muss ich den Tree nicht im Treeview, sondern im Code aufbauen und dann an das Treeview hängen. Das geht scheinbar nicht anders?

Muss ich meine Werte aus der Tabelle per Schleife manuell durchlaufen und dann die Children in das Objekt "Children" meiner Observable Collection speichern?

(oder muss ich in die get-Methode von Children eine Funktion implementieren, die mir das entsprechende Element zurückgibt?)

Ich dachte, das macht der "intelligente" WPF-Treeview für mich?

Danke!

06.06.2011 - 14:05 Uhr

Hallo Winsharp!

in meiner ObservableCollection befinden sich die Eigenschaften ID, ParentID und Name.
Bsp.:
ID=1, ParentID=0, Name="Ebene 1"
ID=2, ParentID=1, Name="Ebene 2 - Eintrag1"
ID=3, ParentID=1, Name="Ebene 2 - Eintrag2"

somit hefte ich die beiden letzten Einträge an "Ebene 1". Ich kann doch beim Eintrag "Ebene1" nicht alle Untereinträge angeben, da es beliebig viele sein können. (Daher verstehe ich nicht, warum Du schreibst, dass ich es anhand der Children aufbauen muss) 🤔

Nur auch wenn ich im XAML-Code ItemsSource="{Binding Path=ParentID}" versuche, klappt es immer noch nicht und alle Einträge werden im obersten Level des Treeviews eingefügt:


<TreeView ItemsSource="{Binding}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=ParentID}">
            <TreeViewItem>
                <TextBlock Text="{Binding Path=Name}"></TextBlock>
            </TreeViewItem>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView> 

Also müsse es der Treeview schon schaffen, das selbständig aufzubauen? Nur wie? 🙁

Danke!

06.06.2011 - 13:35 Uhr

Hallo TomLeech,

Danke! Auf dieser Seite mit dem "Bonsai" war ich auch bereits. Leider wird es darauf genau mit einem ViewModel gelöst und die Child-Einträge erst beim Anklicken aufgebaut.

Ich suche aber eine "einfachere Lösung", indem der XAML-Code direkt anhand von einer Parent-Eigenschaft ein Item selbständig direkt an die richtige Stelle "heftet". Oder geht das überhaupt nicht und ich muss immer den Code-Behind ausprogrammieren?

Kann man meinen Code nicht einfach erweitern, das diese Aufgabe vom Treeview gelöst wird?

Danke!

06.06.2011 - 12:03 Uhr

Hallo,

in einer WPF-Form soll eine Observable Collection in einem Treeview angezeigt werden (unendlich verschachtelt):

Ja, dieses Thema wurde auch hier im Forum bereits ausführlich besprochen und die Werte kommen meist aus mehreren Tabellen. Aber ich möchte alle Werte aus nur einer Tabelle holen und die Items auf einmal in das Treeview schreiben und nicht erst beim daraufklicken (per Child get/set) - wie in den anderen Lösungen hier im Forum.

Es existiert eine ObservableCollection mit ID, ParentID und Name


<TreeView ItemsSource="{Binding}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=ID}">
            <TreeViewItem>
                <TextBlock Text="{Binding Path=Name}"></TextBlock>
            </TreeViewItem>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Der XML Code läuft und die Werte in der Observable Collection werden auch im Treeview angezeigt (allerdings alle in 1. Ebene).

Was muss ich aber ändern, dass die Verschachtelung korrekt gemacht wird? Ich muss ja noch im XML-Code irgendwo die Parent-ID angeben, damit der Treeview weiß, wo er das Element ranhängen soll (ItemBindingGroup="{Binding Path=ParentID}" klappt nicht)

Vielen Dank!

Grüße

16.02.2011 - 13:04 Uhr

Hallo Winsharp und Talla,

danke vielmals Euch beiden!!! 👍 👍

Ja ich meine SolidColorBrush und habe nun lt. der üblichen Notation die gewünschten Werte ausgelesen und auch die Zusammensetzung des Hexwerts verstanden!

Ich hatte mich mißverständlich ausgedrückt und meinte nicht das Speichern des Brushes, sondern nur des Farbanteils aus dem Brush.

Ihr habt wieder einmal das Problem gelöst!

Danke nochmals und Grüße!

15.02.2011 - 15:44 Uhr

Hallo,

ich versuche von

System.Windows.Media.Brush bzw.
System.Windows.Media.Colorbrush

zu einem Farbwert zu gelangen (kein getrenntes R,G,B, sondern den Einzelwert in Form einer Ganzzahl und ohne Transparenz, Verläufe etc.)

Leider habe ich keine passende Methode gefunden. 🙁

(Und natürlich wieder zurück von den beiden in eine Ganzzahl)

Beim einzelnen Farbwert sollte z.B. Rot die Ganzzahl 255 und Schwarz die Ganzzahl 0 haben.

Ich weiß das Brush und Colorbrush noch eine Menge mehr können. Das benötige ich aber an dieser Stelle nicht. Zudem möchte ich in der Datenbank nur 1 Wert, statt dreier Werte für RGB speichern.

Vielen Dank!

mfg

17.01.2011 - 14:40 Uhr

Hallo xxxProd,

Danke vielmals auch für Deinen Tipp! 👍

Diese etwas andere Vorgehensweise werde ich mir sofort ansehen, wenn ich die normale DP in diesem Zusammenhang verstanden habe. Sie ist einem += ähnlich und scheinbar leichter zu verstehen.

Grüße!

17.01.2011 - 14:37 Uhr

Hallo Muro und Talla,

also C# verlangt nun aber auch, wenn ich es als DependencyProperty (public static new DependencyProperty IsReadOnlyProperty = ...) formuliere, den "new" Zusatz. Das sollte nun aber erlaubt sein?, da ich dies ja erreichen möchte und ich eine DependencyProperty mit einer DependencyProperty überdecke.

Wenn ich bereits im XAML-Code IsReadOnly="False" setze, wird mein Code allerdings nicht durch diese DP abgearbeitet. Daher habe ich im Loaded meinen Code nochmals manuell aufgerufen. Ist das so ok oder sollte mein Code beim richtigen Implementieren der Dependency Property immer automatisch ausgeführt werden?

Danke!!!

17.01.2011 - 13:21 Uhr

Hallo Talla und Muro,

ja - doch, ich hatte es mit new überblendet. (Ich schäme mich auch dafür 😭 ) Hat soweit zwar funktioniert, habe es nun jedoch als Dependency Property abgeändert. Aber ihr habt recht, es kann ja nur eine DP sein, da sonst XAML nicht richtig funktionieren würde.

Wenn du die deutsche MSDN-Library verwendest ist es verständlich.

> Ja, die Deutsche. Und Quellen aus dem Web.

Läuft nun alles und Danke nochmals!

👍 👍

17.01.2011 - 12:00 Uhr

Hallo,

Für alle, die es auch benötigen: Habe es nun mit new hinbekommen.

Grüße!

17.01.2011 - 11:50 Uhr

Hallo,

wird IsReadOnly z. B. auf true oder false gesetzt, möchte ich diesen Augenblick abfangen und zusätzlichen Code abarbeiten lassen.

Einfach hätte dies im Loaded mit += gemacht werden können. IsReadOnly ist aber leider keine Dependency Property, weshalb das scheinbar so nicht geht. 🙁

Wie kann man es trotzdem hinbekommen? (Ich möchte aber nicht die Sachen, die durch IsReadOnly intern passieren verhindern, sondern zusätzlich ausführen.)

Danke!

28.12.2010 - 16:59 Uhr

Normalerweise müsste man praktisch jeder .Net-Klasse ein Objekt anhängen können?

Vielleicht kann mir doch jemand weiterhelfen. 🙁

Tausend Dank!

28.12.2010 - 13:46 Uhr

verwendetes Datenbanksystem: <SQL-Server 2000-2008R2>

Hallo,

ich stelle eine ganz einfache EntityConnection her:


Myconnection = new EntityConnection(...);
Myconnection.Open();

Wie kann ich an Myconnection z.B. einen selbst erzeugten String (z.B. für "Verwaltungskram") anhängen? 🙁

Ich stelle mir das so vor:


Myconnection.AddObject(string Teststring);  // geht natürlich nicht
Myconnection.Teststring="Hallo";

Vielen Dank!

17.12.2010 - 11:10 Uhr

Ja, zum einmaligen Ausführen des Loaded-Codes habe ich momentan auch noch keine andere Lösung gefunden, als ein Flag zu setzen.

Ich finde das aber sehr unelegant, zumal man das öfters gut gebrauchen könnte.

Vielleicht kennt ein Experte ja eine Methode, um per Reflection o. ä. zu prüfen, ob Loaded bereits einmal ausgeführt wurde.

Wäre interessant!

IsLoaded steht am Anfang der Loaded-Methode auch bei der 1. Durchführung immer auf true. Ich vermute fast, dass das ein Bug ist. - Geladen ist alles ja immer erst, wenn der Loaded-Code fertig ist.

Grüße

14.12.2010 - 16:42 Uhr

Hallo,

Habe von allen die Tipps durchgelesen. Vielen Dank für so vielseitige Hilfen und Links an alle! 👍 👍 👍 👍

Ich wußte vorher nicht nach was ich suchen sollte.

Es ist gut die verschiedenen Ansätze zu kennen und in meinem Fall habe ich mich für eine Liste entschieden.

Tausend Dank für die wirklich schnelle und tolle Hilfe! =)

Grüße

14.12.2010 - 13:17 Uhr

Hallo,

ich habe eine


public static class Test
{
  public static bool Wert = false;
}


Test.Wert=true;     // klappt ja

Aber wie kann ich per Text darauf zugreifen?


Test.["Wert"]=true;  // geht ja leider nicht

Auch finde ich innerhalb meiner Klasse kein GetValue/SetValue. Dort gibt es nur Equals und ReferenceEquals. X(

Vielen Dank!

07.12.2010 - 15:54 Uhr

Hallo,

hat wirklich nicht jemand eine Idee? 🤔 Eine Zeile müsste das ja eigentlich erledigen.

Danke

06.12.2010 - 12:18 Uhr

Hallo,

in einem WPF DataGrid soll beim Rechtsklick auf einen Eintrag ein Kontextmenü angezeigt werden.

**
Das Problem ist, es wird nicht mehr der Standardcode ausgeführt (nämlich das markieren des Eintrags, über dem sich die Maus gerade befindet)** 🙁

Alle Versuche mit "Handled" und base.RaiseEvent() haben nicht funktioniert.

Wie wird der Standardcode vor meinem eigenen Code (nämlich Öffnen des Kontextmenüs) ausgeführt?

(Ich befinde ich im DataGrid.MouseRightButtonUp)

Vielen Dank!

01.12.2010 - 16:52 Uhr

Hallo Talla,

danke nochmals! 👍 Ja, jetzt habe ich es als Objekt übergeben und es klappt jetzt. Ich dachte, das könnte ich sparen. Aber es wird ja ohnehin mit Referenzen gearbeitet, weshalb das Programm sich dadurch nicht weiter im Speicher aufbläht.

Gruß!

30.11.2010 - 15:10 Uhr

Hallo,

über Reflection komme ich auf MyClass. Nur wie komme ich an den Member "Y"?


var MyObject = (parentWindow.GetType().GetMember("MyClass")[0]);

liefert mir ein MyClass-Objekt. Wie kann ich jedoch auf den Class-Member "Y" zugreifen, der sich in MyClass befindet?

Gibt es da draußen einen Reflection Profi der das weiß?

Vielen Dank!

Grüße

30.11.2010 - 12:16 Uhr

Hallo Talla,

wiedereinmal vielen Dank für Deinen Beistand! =)

Mach im UserControl ein Property welches vom Parent aus gesetzt wird.

-> Das geht leider auch nicht. Das Usercontrol besitzt z. B. Buttons, die beim Klick Code ausführen. Daher kann ich diesen Code nicht so einfach vom Parent aus aufrufen.

Weiterhin können auch mehrere Usercontrols auf einer Form (und auf mehreren Forms) platziert werden. (Genau so wie z. B. ein normales WPF-Control)

Ich kann auch niemals alle jemals benötigten Member des Parent Forms immer an die Usercontrols übermitteln (das wäre viel zu viel Datensalat)

Praktisch habe ich nur folgendes Problem:

**
Wie kann ich ein casting in den Typ veranlassen, der dem Parent Window entspricht und dabei den Typ nicht explizit angeben, sondern dynamisch ermitteln❔**


(parentWindow).FindName("MyClass"); // geht leider auch nicht

Noch irgendwelche Ideen?

Danke!

30.11.2010 - 11:11 Uhr

Hallo Ibm1305,

Danke, Geht aber leider nicht, da es auch mit mehreren Fensterinstanzen laufen muss. 🙁

Noch eine Idee?

Grüße!

30.11.2010 - 10:26 Uhr

Hallo,

in einigen meiner WPF-Fenster wird eine "public class MyClass" erstellt (direkt im Codebehind der Klasse). MyClass besitzt einen Member "Y" (int).

In einem selbst erstellten WPF Usercontrol möchte ich auf diese Klasse zugreifen.


Type windowType = Window.GetWindow(Parent).GetType();
((windowType)Window.GetWindow(Parent)).MyClass.Y=1;

Leider klappt das nicht. 1. erkennt C# nicht "windowType" als echter Typ an und 2. wird MyClass nicht erkannt.

Das casting nach ((Window)Window.GetWindow(Parent))... würde mir nichts bringen, da im Standard Window keine Klasse MyClass existiert.

Wie kann ich auf MyClass.Y sonst zugreifen? 🙁 (verzweifelt)

Vielen Dank!

29.11.2010 - 17:02 Uhr

Hallo Xynratron,

auch Dir danke für den Tipp! 👍

Wenn ich in der Datenbank Änderungen machen dürfte, wäre das für mich auch noch ein interessanter Weg! - Optional könnte ich auch unter C# mit Views arbeiten, jedoch möchte ich lieber beim Entity Framework bleiben.

Grüße

29.11.2010 - 15:49 Uhr

Hallo xxxprod und talla,

Danke für Eure Hilfe! 👍 👍

KeepAlive habe ich versucht und in verschiedenen Szenarien eingesetzt (teils mit JournalEntry). TabControl, die jeweilige Page und im Control. Damit funktioniert es scheinbar nicht.

Baut man in der jeweiligen Page eine <Page> mit KeepAlive ein, gibt es beim Wechseln eine Fehlermeldung:

Für die Page sind nur "Window" oder "Frame" als übergeordnete Elemente zulässig.

Ich führe den Code nun im Loaded nur einmal aus und ignoriere weitere Aufrufe. Der Loaded ist für mich zwingend, da erst da das Binding steht.

Vielen Dank nochmals!

Grüße

29.11.2010 - 14:28 Uhr

Hallo,

bei der Erstellung eines WPF-Usercontrols bin ich bislang davon ausgegangen, dass dessen Loaded-Methode nur einmal nach dem Laden der Form gefeuert wird.

Dies ist aber nicht so, wenn sich das Usercontrol auf einem Pageframe befindet. Dann wird auch bei jedem Wechsel auf die zugehörige Page Loaded gefeuert! 😜

Gibt es einen empfohlenen Weg, um diesen Fehler?! zu umgehen, außer das man mit einem Boolwert arbeitet?

Danke!

29.11.2010 - 14:23 Uhr

Hallo Wpffan,

Danke für den Tipp! 👍

Darauf bin ich nicht gekommen. Das klappt!

Vielen Dank!

29.11.2010 - 14:05 Uhr

Hallo,

vielen Dank für Deinen "Linq-Link" =) 👍

Da gibt es scheinbar wieder einige verschiedene Ansätze. Ich werde mir das gleich einmal ansehen.

Grüße

29.11.2010 - 12:27 Uhr

Hallo FZelle,

vielen Dank! 👍

Die Datenbank ist bereits älter (obwohl es nvarchar(x) bereits ab 2000er SQL-Server gab), stammt nicht von mir und es soll vorerst nur eine neue Oberfläche entwickelt werden. Derzeit darf ich die Felddefinitionen leider nicht anfassen.

Aber dann weiß ich jetzt, dass es keine derartige Einstellung gibt und werde wohl oder übel die String-Felder immer einzeln mit Trim() auslesen.

Danke nochmals und Grüße!

29.11.2010 - 12:23 Uhr

verwendetes Datenbanksystem: <SQL-Server 2000-2008R2>

Hallo,

in einer Linq to SQL Abfrage möchte ich die Felder nicht direkt angeben, sondern aus einem String verwenden. Leider gibt mir die Linq-Abfrage nicht die Inhalte, sondern den String zurück. Wie funktioniert das trotzdem?:


string sString = "tab.Vorname + ' ' +tab.Nachname";

...from tab in ent.kunden where ... select sString).FirstOrDefault;

Vielen Dank

Grüße!

26.11.2010 - 15:10 Uhr

Hallo witte,

Danke für Deine schnelle Hilfe! 👍

Nein, leider nicht änderbar, da diese SQL-Tabellen nicht von mir stammen und nicht "angefasst" werden dürfen. 🙁

Evtl. gibts ja eine Einstellung wie "TrimTextOnRead=true" im EF.

Danke!

26.11.2010 - 14:06 Uhr

verwendetes Datenbanksystem: <SQL-Server 2000-2008R2>

Hallo,

per Entity Framework lese ich meine Daten vom SQL-Server und stelle sie dann in einer WPF-Textbox dar.

Handelt es sich um Textfelder, werden die nachfolgenden und unnötigen Leerzeichen vom Sql-Server an meine Klasse und dann an die Textbox übertragen und beim Eintippen weiterer Zeichen in die WPF-Textbox blockiert die Box die Eingabe, da alles mit nachfolgenden Leerzeichen aufgefüllt ist. 😜

Kann man im Entity Framework eine Einstellung machen, dass alle aus der Datenbank gelesenen Texte (außen) getrimmt werden? (z. B. TrimTextOnRead=true) (Ich möchte in meinen Linq-Abfragen nicht alle Felder einzeln abfragen und dann einzeln alle Textfelder mit Trim() modifizieren.)

Eine Änderung des getter/setter der Klasse kommt nicht in Frage, da es sich um die vom Framework definierten Klassen handelt.

Durch die Einstellmöglichkeit im Framework sollen a) nicht so viele unnötigen Daten übertragen werden und b) meine Textbox ohne Probleme funktionieren. Ein Abfagen der Leerzeichen in der Textbox wäre nur die zweitbeste Lösung.

Danke!

26.11.2010 - 13:32 Uhr

Hallo Talla,

greife nun nicht mehr über base zu, sondern übergebe das Objekt gleich mit und arbeite damit weiter.

Nun funktioniert glücklicherweise auch das!

Nochmals Tausend Dank und ein schönes Wochenende! 👍

25.11.2010 - 16:03 Uhr

Hallo Talla,

zufrüh gefreut. Der Aufruf funktioniert einwandfrei. Jedoch bekommt scheinbar "base" in "MyMethode" eine andere Bedeutung und liefert immer null. 🤔

Rufe ich MyMethode hingegen im Loaded meines Usercontrols auf, funktioniert "base".

Was hat es damit auf sich?

Vielen Dank!

25.11.2010 - 15:49 Uhr

Hallo Talla,

entschuldige! Ich hatte wirklich Tomaten auf den Augen: 8).

Manchmal sieht man den Wald vor Bäumen nicht.

Danke nochmals! Funktioniert nun 👍

Grüße