Laden...
Avatar #avatar-4072.jpg
Benutzerbeschreibung
Softwareentwickler aus OWL mit vielen Interessen. Hauptsächlich entwickele ich Desktopanwendungen mit WPF, bin aber auch ab und an mal in der Web- oder Mobil-Ecke unterwegs. Als Hobby beschäftige ich mich mit Embedded-Entwicklung, IoT und Smart Home.

Forenbeiträge von pinki Ingesamt 709 Beiträge

24.01.2018 - 09:25 Uhr

Vielen Dank für deine Antwort.

Ich bin für jeden Verbesserungsvorschlag offen. =)
Wie wäre es denn besser?

Wenn du mir von EF Core ab rätst, dann nehme ich lieber etwas anderes.
Noch ist das ja nicht "mit Schmerzen verbunden".
Hier im Forum habe ich schon öfter von Dapper gelesen. Wäre das in diesem Fall das Mittel der Wahl?

Gruß, pinki

23.01.2018 - 16:44 Uhr

Hallo zusammen,
ich beginne gerade mit der Entwicklung einer Webanwendung.
Diese ist ein ASP.NET Core WebAPI mit Angular-Frontend.

Folgende Projekte habe ich (inkl. Referenzen):

  • Frontend
  • Backend.API
    -- Backend.DataLayer.Abstraction
    -- Backend.DataLayer.Models
    -- Backend.DataLayer.MSSQL
  • Backend.DataLayer.Abstraction
    --Backend.DataLayer.Models
  • Backend.DataLayer.Models
    -- System.ComponentModel.Annotations
  • Backend.DataLayer.MSSQL
    -- Backend.DataLayer.Abstraction
    -- Microsoft.EntityFrameworkCore.SqlServer (2.0.1)

Alle Projekte im DataLayer sind .NET Standard (2.0) Bibliotheken.

Wenn ich nun versuche via Package Manager Console eine Migration zu erstellen, sagt mir diese einfach stumpf ":::

Einmal bekam ich die Meldung> Fehlermeldung:

Entity type 'Artikel' has composite primary key defined with data annotations. To set composite primary key, use fluent API.

Daraufhin habe ich die entsprechende Änderung vorgenommen und es kommt wieder ":::

Habt ihr einen Tipp für mich, wie ich an genauere Fehlermeldungen kommen kann?
Oder ist .NET Standard hier der falsche Weg und ich sollte direkt .NET Core nehmen?

Gruß, pinki

23.01.2018 - 15:26 Uhr

Danke für die Info.

Wichtig: mit dem TouchEnter und TouchLeave hat es nicht sauber funktioniert. Optisch scrollt er kurz und gleich wieder zurück - als würde das TouchLeave Event sofort ausgelöst wenn Windows das TabTip startet.

Wie ich das verstanden habe, wird TouchEnter beim Berühren und TouchLeave beim Loslassen aufgerufen.

22.01.2018 - 13:35 Uhr

Ich denke, dass ich die Frage evtl. nicht ganz richtig verstanden habe, aber das ViewModel sollte seine View nicht kennen.

19.01.2018 - 09:03 Uhr

Okay, dann sollte man vielleicht lieber doch gezielt Leute mit entsprechendem Profil anschreiben.

19.01.2018 - 08:41 Uhr

Du kannst ja mal ein Experiment starten: Erstelle ein paar Profile auf Xing, die alle unterschiedliche Spezialisierungen haben und alle auf der Suche nach einer Stelle sind. Ein Profil könntest du noch als Allrounder ohne wirkliche Spezialisierung mit dazu packen. Dann schau, was dir angeboten wird.

16.01.2018 - 15:07 Uhr

In meinen WPF-Anwendungen verwende ich immer folgendes Snippet in der App.xaml.cs:

// Eingestellte Sprache für Bindings übernehmen
// WPF verwendet sonst en-US - egal, was sonst eingestellt ist
FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement),
    new FrameworkPropertyMetadata(
        XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)
    )
);
11.01.2018 - 08:43 Uhr

EventArgs, die geändert werden, hast du bestimmt schon bei RoutedEvents oder dem Closing-Ereignis eines Fensters gesehen.

10.01.2018 - 13:13 Uhr

Den Umfang der Daten und die Performanceanforderungen kenne ich aktuell selbst noch nicht.
Da wird gerade spezifiziert.

Ist ObjectKey die ID des Objekts aus dem Dump innerhalb der eigenen Tabelle?

10.01.2018 - 11:59 Uhr

@MrWasabi
Ich würde die Änderungen auch gern wieder rückgängig machen können.

10.01.2018 - 11:23 Uhr

Vollständig würde dann eher etwas gespeichert werden wie "Änderung Objekt X an folgenden Stellen".

Wie würde man sowas denn modellieren?

10.01.2018 - 10:34 Uhr

Danke für deine Antwort.
Für mich sieht das eher nach Möglichkeit 1 in etwas anders aus.

Wenn ich Event Sourcing richtig verstanden habe, werden da in einer Art Log nur die Änderungen gespeichert. Möchte man den aktuellen Zustand eines Objekts haben, wird dieses anhand des Logs rekonstruiert. Für bessere Performance gibt es dann Snapshots, damit man nicht immer das ganze Log durchlaufen muss. Gelöscht wird nie irgendetwas.

In der Theorie klingt das für mich total einfach. Bei der Umsetzung habe ich aber ein gewaltiges Brett vorm Kopf.

10.01.2018 - 09:44 Uhr

Hallo zusammen,

ich möchte eine Anwendung (Angular als Frontend und ASP.NET Core 2 als Backend) schreiben.
Als DBMS kommt MSSQL zum Einsatz.

Was ich gern hätte: Jede Änderung soll nachverfolgbar sein.

Ich habe mich bereits etwas umgesehen und folgende Möglichkeiten stachen dabei heraus.

Möglichkeit 1: Nach jeder Änderung den kompletten Datensatz neu speichern inkl. Änderungszeitpunkt und der ID des Benutzers, der die Änderung vorgenommen hat.
Möglichkeit 2: Event Sourcing.

Möglichkeit 2 klingt für mich am interessantesten, allerdings habe ich hier noch keinerlei Erfahrungen.

Nun zu meiner Frage: Wie sollte man das am besten angehen?

Gruß

pinki

10.01.2018 - 09:04 Uhr

Sir Rufos Antwort erscheint mir schlüssiger.

Schau dir mal folgenden Fall an:
Es gibt ein Basisklassenobjekt und 5 EinzelnesElemente-Objekte, die sich in ListeElemente der Basisklasse befinden.
Man will jetzt auf den Status zugreifen.

Bei einer Ableitung hat jedes Objekt seinen eigenen Status und weiß immer noch nichts über den Status des Objekts, in dessen ListeElemente man sich befindet.

28.11.2017 - 09:02 Uhr

Zusätzlich sei noch erwähnt, dass "PositionName" eine Eigenschaft/Property und kein Attribut ist.

Mehr zu Attributen in .NET findest du hier: Verwenden von Attributen in C#

27.11.2017 - 09:32 Uhr

Die gefundene Lösung sollte auch mit DataTemplates für mehrere ViewModels funktionieren.
Diese müssen lediglich in den Resources vorhanden sein.

24.11.2017 - 12:12 Uhr

Endlich klappt es! 😁

Die Lösung war der Vorschlag von Koen j in diesem Beitrag.

Zusammenfassung:
Man schreibt einen eigenen DataTemplateSelector, der das eigentliche DataTemplate in einem neuen DataTemplate verpackt. Dadurch baut das ContentControl seinen Inhalt immer wieder neu auf, da es jedes Mal ein neues DataTemplate zurückgegeben bekommt.

24.11.2017 - 11:22 Uhr

Selbst habe ich keinen "verbaut". Das ContentControl und die Chart-Komponente haben jedoch beide intern einen ContentPresenter, den sie nutzen.

Ich habe mal ein Bild von dem Fehler angehängt.

24.11.2017 - 11:06 Uhr

So...
Ich habe jetzt mal wild durch die Bank - sowohl beim ContentControl als auch beim Chart - diverse Methoden aufgerufen, wenn das Problem auftritt. Da bessert sich leider nichts.
Herausgefunden habe ich bei der ganzen Suche, dass man beim Chart die Animation beim Updaten ausschalten kann, das reduziert zwar die Fehlerhäufigkeit, sieht aber bei weitem nicht mehr so gut aus.
Ein nächster Versuch war das Setzen der Eigenschaften VirtualizingPanel.IsContainerVirtualizable und VirtualizingPanel.IsVirtualizing auf false (sowohl beim ContentControl als auch beim Chart), was auch nicht zum erhofften Ergebnis geführt hat.
Meine nächste Hoffnung war dann, dass dies evtl. mit an der MahApps.Metro-Komponente liegt, weshalb ich das TransitioningContentControl durch ein normales ContentControl ausgetauscht und alle Sachen erneut durchprobiert habe -> selbes Ergebnis.

Hat noch jemand eine Idee?

23.11.2017 - 20:58 Uhr

Danke für den Tipp! 😃
Ich werde es morgen mal mit InvalidateVisual() innerhalb des Behaviors versuchen und dann berichten.

23.11.2017 - 15:59 Uhr

Die Datei wird ja schon im Projekt vorhanden und eingebunden sein, nehme ich an.
Dann brauchst du nur noch Namespace- und Klassennamen.
Läuft wie mit jeder anderen Klasse auch.
Aber auch das gehört, wie bereits erwähnt, zu den Grundlagen.

23.11.2017 - 14:58 Uhr

Hallo zusammen,

ich habe eine Liste mit ViewModel-Objekten.
Das ausgewählte Objekt wird der Content-Eigenschaft eines ContentControls per Binding zugewiesen.
Im DataTemplate für das ContentControl habe ich eine Chart-Komponente (Live-Charts).
Diese hat zwischendurch den Fehler, dass sie falsche Linien einzeichnet, wenn ich in der Liste ein anderes Objekt auswähle. Hierbei scheint sich vom Chart nur der DataContext zu verändern.
Wie kann ich es erreichen, dass das Chart-Objekt hierbei tatsächlich neu erzeugt wird, damit ich die Anzeigefehler vom Aktualisieren vermeiden kann?

LG
pinki

Edit: Es ist kein normales ContentControl sondern ein TransitioningContentControl aus dem MahApps.Metro-Paket.

22.11.2017 - 14:52 Uhr

Erstell dir dafür lieber eigene Eigenschaften im UserControl.

Warum sollte man von außen auf alles beim Button zugreifen wollen?
Oft sind doch nur das Clicked-Event oder der Text interessant.

16.11.2017 - 17:08 Uhr

Hallo ByteDevil,

du wählst im XAML-Editor dein LogConsole-Objekt aus.
Dann suchst du dir im Property-Explorer die Template-Eigenschaft.
Am rechten Rand der Zeile ist ein kleines Kästchen. Da klickst du drauf und wählst "Convert to New Resource".
Damit erstellst du dir eine Kopie des Templates und weist dieses kopierte Template dem Objekt zu.
Innerhalb dieser Kopie siehst du den Aufbau und alle Trigger, visuelle Zustände usw., die dazu gehören und kannst alles nach Belieben an deine Bedürfnisse anpassen.

Gruß, pinki

16.11.2017 - 13:05 Uhr

Hallo,
ohne es probiert zu haben würde ich raten, dass das geht, indem man das Originaltemplate in ein neues Template kopiert und den entsprechenden Rahmen daraus entfernt.

14.11.2017 - 11:18 Uhr

In welchem Verzeichnis befindet sich denn dein Launcher?
Im selben Verzeichnis, in dem sich auch der Updater befindet?

Wiederholung der weiteren Fragen:
Wird die von einer sicheren Quelle geladen?
Sind die Anwendungen signiert?

13.11.2017 - 14:56 Uhr

Für mich zählt das zu Geschmackssache.

Ein Richtig oder Falsch gibt es da nur, wenn man sich an einen Style zu halten hat.

08.11.2017 - 11:39 Uhr

Doch, das geht.

    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="MouseEnter">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="400" />
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="400" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>

                <EventTrigger RoutedEvent="MouseLeave">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="200" />
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="200" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Style>
02.11.2017 - 16:40 Uhr

Wenn ich deinen Code in eine neue Form kopiere, läuft das ohne Probleme.
Einzig MyForm habe ich durch Form ersetzt.

27.10.2017 - 07:55 Uhr

[...] das ganze soll autark über WLAN laufen. Eine kleine Box, mit Knopf, das an den Strom angeschlossen ist.

Das wäre mit dem ESP8266 kein Problem, wenn du Telegram oder einen anderen Messenger mit WebAPI nutzt. Das ist ein Mikrocontroller mit WLAN, der sich auch über die Arduino-Umgebung programmieren lässt. Als Boards eignen sich z.B. Wemos D1 (ab ~2,50 €), NodeMCU (ab ~3 €) oder ESP-01 (ab ~1,50 €). Die Ausstattung der Boards ist unterschiedlich, da musst du mal schauen, was für dich am besten passt.

Wenn du nach entsprechenden Tutorials schaust, siehst du auch, wie du die Software da drauf bekommst.

Edit: Damit das Teil möglichst sparsam mit dem Strom umgeht, solltest du es in den DeepSleep versetzen. Der Button würde dann ein Aufwachen auslösen und die Nachricht absetzen. Danach kann weiter geschlafen werden.

26.10.2017 - 15:21 Uhr

Hier machen die das über einen StyleSelector.

26.10.2017 - 10:54 Uhr

Wenn es nicht WhatsApp sein muss, sondern auch Telegram sein darf, gibt es gute Tutorials in Verbindung mit den günstigen ESP8266-Boards.

25.10.2017 - 12:13 Uhr

So, der Account wurde jetzt eingerichtet und die Gebühr bezahlt, nachdem nachgefragt wurde, ob nicht auch zur Not ein Screenshot der Zahlungsaufforderung ausreichen würde.

Es kommt eine E-Mail, in der aufgelistet ist, wann für was welcher Betrag wovon abgebucht wurde.
Eine Bestellnummer ist ebenso aufgeführt.
Oben drüber ist noch das Google-Logo, eine Anschrift fehlt allerdings.

Es gibt noch einen Link zu den Transaktionsdetails, der zum Google-Zahlungscenter führt und die entsprechende Transaktion direkt aufruft.
Dort ist dann auch die Anschrift von Google mit aufgeführt.

Die Anschrift von einem selbst fehlt jedoch bei beidem.
Ich hoffe, dass das für unsere Buchhaltung ausreicht.

24.10.2017 - 11:14 Uhr

Hallo zusammen,
ich soll für unsere Firma einen Account für die Google Play Console erstellen.
Dabei sollen die $25 per Kreditkarte bezahlt werden.
Bevor ich die Zahlungsdaten von der entsprechenden Stelle eingegeben bekomme, muss ich jedoch sicherstellen, dass hierüber eine Rechnung für uns erstellt wird.
Ich nehme an, dass dies der Fall sein wird, habe aber nirgends etwas gefunden, wo tatsächlich steht, dass man auch eine Rechnung dafür erhält.

Deshalb nun meine Frage: Bekommt man nach der Zahlung eine Rechnung über die $25 Einrichtungsgebühr?

Gruß
pinki

20.10.2017 - 12:52 Uhr

Dafür müsstest du in den Code schauen.
Hatte das mit der Selektion/Markierung am Anfang überlesen. 😕

20.10.2017 - 11:37 Uhr

Schau dir mal dnSpy an.
Das nehme ich für sowas gerne.

Edit: Für WPF ist Snoop auch noch ganz praktisch.

20.10.2017 - 09:55 Uhr

Hallo,
ich habe das bei mir so implementiert, dass jede Nachricht, die gesendet wird, mit einer Nummer versehen ist, die dann auch in der Antwort auftaucht. Beim Senden wird gewartet, bis die Klasse, die die Antwortdaten in Objekte wandelt, ein Antwortpaket mit der passenden Nummer hat und dieses dann entsprechend umgewandelt zurückgegeben. Das Ganze habe ich mit async/await und 'ner TaskCompletionSource innerhalb einer Service-Klasse gemacht. Diese Service-Klasse wird dann per Dependency Injection überall dort injiziert, wo sie benötigt wird.

19.10.2017 - 16:55 Uhr

Ich glaube es geht um Menüleisten.
Wenn Untermenüpunkte bearbeitet werden, wird das Menü in der Regel ausgeklappt angezeigt.
Hier scheint das nicht (mehr) der Fall zu sein.

19.10.2017 - 08:43 Uhr

Seid euch bewusst, dass auch kleine Unternehmen der Datenschutz-Grundvordnung unterliegen und hier sogar kleine Leaks 300.000€ Strafe bedeuten können.

Gefühlt gibt es folgende ungeschriebene Regel: Je größer deine Firma ist, je größer die Menge an gestohlenen Daten und je sensibler die Information, desto weniger passiert. Dann reicht eine plumpe Entschuldigung aus. Dass das Strafen nach sich zieht, habe ich in nahezu keinem Fall gelesen.

18.10.2017 - 16:04 Uhr

Für die Erstellung könnte sich eine protected Methode in der SyncBehaviour-Klasse (z.B. SynchronizedObject CreateSynchronizedObject(int value) anbieten. Darin könnte man dann auch über eine der bereits erwähnten Arten die ID zuweisen.
Innerhalb dieser Methode könnte man ja mit this arbeiten und hat dann in den abgeleiteten Methoden nicht so viel Schreibarbeit.

Elegant finde ich diesen Weg aber auch nicht wirklich...

13.10.2017 - 12:55 Uhr

Ich finde, dass es nicht schaden kann, wenn man sowas als kleine Übung mal gemacht hat.

13.10.2017 - 10:47 Uhr

Wenn das Programm geschlossen ist, kannst du keine Daten mehr anzeigen. 👅

Ich nehme aber an, dass du öffnen meinst.
Dann liest du die Datei(en) ein und pulst dir da die Daten entsprechend raus, erzeugst damit deine Objekte und stellst diese entsprechend dar.

13.10.2017 - 09:40 Uhr

Genau.

Edit:
Das "Genau." bezieht sich auf das "etwas wie File.WriteAllText".
123thomas' Einwände sollten natürlich beachtet werden.

12.10.2017 - 11:12 Uhr

Deine Erklärung liefert auf jeden Fall detailliertere Infos für die Nachwelt als mein kurzer Satz. =)

11.10.2017 - 15:39 Uhr

Hi,
wenn ich das auf die Schnelle richtig sehe, dann wird von dem Bitmap, das an die Zoom-Erweiterungsmethode übergeben wird, kein Dispose aufgerufen.

11.10.2017 - 14:27 Uhr

Moin,
bei mir war das z.B. so, dass ich überhaupt keinen Quelltext in der MA direkt haben durfte. Alles, was an Quelltext abgegeben wurde, war Bestandteil des Anhangs.
Dieser ist komplett mit XML-Kommentaren versehen und sonstige wichtige Stellen durch Kommentare zwischendurch.
Die eingesetzten Entwurfsmuster wurden kurz erklärt.
An Diagrammen hatte ich einen Überblick über die Architektur und ansonsten das, was gerade passte. Wurde z.B. Kommunikation beschrieben, gab es ein entsprechendes Sequenzdiagramm, das dem Detailgrad der dazugehörigen Beschreibung entsprach.

Wie Palin aber schon schrieb, können dir deine Betreuer da mehr zu sagen.
Die solltest du auch auf jeden Fall fragen, da sie es sind, die das letztendlich bewerten und deshalb auch genau wissen sollten, wie sie das gern hätten.
Solltest du unterschiedliche Antworten erhalten, dann kannst du die das auch untereinander abstimmen lassen und bist selbst aus der Diskussion fein raus.