Laden...
Avatar #kSCfyuTL1TM0cpx0ApeH.jpg
echdeneth myCSharp.de - Member
Anwendungsentwickler Sachsen, Herrnhut/Zittau Dabei seit 05.06.2019 161 Beiträge

Forenbeiträge von echdeneth Ingesamt 161 Beiträge

20.04.2020 - 09:13 Uhr

...Definiere alle deine Resourcen in XAML und verwende sie auch ausschließlich dort...

leicht gesagt 😃
Bei Farben ist das nicht schwer (habe ich grad kürzlich eine neue Erkenntnis gewonnen).
Aber wie sieht es mit im CodeBehind definierten Klassen und anderen Gedöns aus?

Ich habe manchmal den Eindruck das da was nachhängt beim Wechsel in ein anderes UserControl, habe aber nicht die Erfahrung dies in Erfahrung zu bringen.

17.04.2020 - 09:52 Uhr

Moin und Gesundheit,

ganz sicher bin ich mir nicht bei der Formulierung meines Anliegens, weshalb im um Nachsicht bitte.

Ich habe eine Anwendung (public partial class MainWindow : Window) in dem innerhalb eines Grid, 6 UserControl (UC) über entsprechende Button geladen (?) werden können.

Muss ich die beim Wechsel in ein anderes UC, Klassen/Variablen/etc. händisch disposen und wenn ja innerhalb des UC oder im MainWindow?

Die Frage stelle ich weil ich den Eindruck habe das die UC nicht "geleert" wurden.
Verwendete Farben werden entweder in der App.xaml deklariert oder:


SolidColorBrush MegaBlau, MegaBlauDunkel;

...

MegaBlau = (SolidColorBrush)new BrushConverter().ConvertFrom("#006ba0");
MegaBlauDunkel = (SolidColorBrush)new BrushConverter().ConvertFrom("#004171");

Dementsprechende Lektionen sind in der Schule bislang nicht enthalten.

Ich hoffe mein Anliegen verständlich dargelegt zu haben.

LD Marko

15.04.2020 - 15:32 Uhr

Moin und Gesundheit,

ich habe ein winziges Problem, in einem UserControl sind 5 DataGrids, 4 kleine und daneben 1 großes.

Man kann sich denken wozu dies dienen mag, richtig, 4 Tabellen (Quelle: MySQL) und mit einem Klick wird auf die Große geschaltet.

Nun ist in eine der 4 nur eine Zeile hinne, SelectionChange is nich, Doppelklick per EventSetter wollte ich auch nicht und MouseDown ist auch ein Doppelklick (warum auch immer).

Kann ich ein Event auslösen, in Folge dessen ich das:

var Row = (CLass)DataGrid.SelectedItem;

verwenden kann?

01.04.2020 - 13:37 Uhr

Wurde korrigiert... war aber nur ein nebensächliches Problem

01.04.2020 - 10:40 Uhr

verwendetes Datenbanksystem: <MySQL>

Moin und Gesundheit,

die Tabelle "Artikelliste" soll mit "Be_Artikel" und "So-Artikel" per JOIN zusammengeführt werden.
Dabei sollen alle Werte die diesselbe ID haben (oder Artikelnummer) adiert werden.
(Das Ganze wird anschließend mit einer Weiteren Tabelle geJOINt - "Prioliste")

  1. Das Ganze funktioniert durchaus mit "Artikelliste" und "Be_Artikel",
    ich weiss aber nicht wie ich "So_Artikel" mit einbringen soll oder
  2. ob das Konstrukt im Ganzen in der Form überhaupt sinnvoll ist.
    Kann jemand mal daruber schauen?

"LEFT JOIN So_Artikel" um die Idee zu verdeutlichen.


SELECT
    Artikelliste.ID,
    Artikelliste.ArtNr,
    Artikelliste.Name,
    SUM(Be_Artikel.Menge) AS Menge,
    SUM(Be_Artikel.Geliefert) AS Geliefert,
    Artikelliste.Sonderartikel
FROM
    Artikelliste
LEFT JOIN Be_Artikel ON Be_Artikel.Artikel_ID = Artikelliste.ID
LEFT JOIN So_Artikel ON So_Artikel.Art_So_ID = Artikelliste.ID
GROUP BY
    Artikelliste.ID

Gesamter (funktionsfähiger) Originalcode:


SELECT
Y.ID,
Y.ArtNr,
Y.Name,
Y.Menge,
Y.Geliefert,
COALESCE(X.PrioMenge,0) AS PrioMenge,
COALESCE(X.Datum,'1900-01-01') AS Datum
FROM
    (
    SELECT
        Artikelliste.ID,
        Artikelliste.ArtNr,
        Artikelliste.Name,
        SUM(Be_Artikel.Menge) AS Menge,
        SUM(Be_Artikel.Geliefert) AS Geliefert
    FROM
        Be_Artikel,
        Artikelliste
    WHERE
        Be_Artikel.Artikel_ID = Artikelliste.ID
    GROUP BY
        Be_Artikel.Artikel_ID
) AS Y
LEFT JOIN(
    SELECT
        Artikelliste.ArtNr,
        Artikelliste.Name,
        Priority.PrioMenge,
        Priority.Datum
    FROM
        Artikelliste,
        Priority
    WHERE
        Priority.ID_Artikelliste = Artikelliste.ID
) AS X
ON
    Y.ArtNr = X.ArtNr;

passendes EER Diagramm im Anhang

Danke für eure Mühe

24.03.2020 - 11:07 Uhr

Habe den Fehler gefunden, ist ein sogenannter Watschn-Fehler,
also einer bei dem man eigentlich watt links und recht kriegen müsste.

Habe vor der Meldung ein Zeilenumbruch gehabt...

24.03.2020 - 09:33 Uhr

Moin und Gesundheit euch allen,

ich habe eine "Box" die sich Animiert bei einer Fehlermeldung z.B. öffnet und dann die
Meldung oder Exception anzeigt. Die Animation ist hierbei nicht das Problem und
funktioniert wie erwartet. Die Meldung hingegen wird nicht Vertikal Zentriert sondern nur Horizontal.
Die Anzeige im Designer hingegen ist wie sie soll, Hor. und Vertik. zentriert.

Die "Box" - Habe es auch ohne Grid probiert.


        <materialDesign:Card Grid.Row="2"
                             Height="50" VerticalAlignment="Bottom"
                             Margin="0,0,0,-0"
                             x:Name="Statusbalken">
            <materialDesign:Card.Background>
                <SolidColorBrush Color="#FF0AA01E"/>
            </materialDesign:Card.Background>
            <Grid>
                <TextBlock Text="Statusmeldung" 
                           FontSize="20" 
                           FontWeight="Bold"
                           x:Name="verif" 
                           HorizontalAlignment="Center" 
                           VerticalAlignment="Center" 
                           />
            </Grid>
        </materialDesign:Card>

Innerhalb einer catch-Klausel:


                Statusbalken.Background = Brushes.Red;
                verif.Text = "\nFehler: " + ex.Message;
                status.Text += "\nFehler: " + ex.Message;               
                Storyboard sb = FindResource("verif") as Storyboard;
                sb.Begin();

Und das Storyboard:


        <Storyboard x:Key="verif">
            <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" 
                                              BeginTime="00:00:00"
                                              AutoReverse="True" 
                                              Storyboard.TargetName="Statusbalken">
                <SplineThicknessKeyFrame KeyTime="00:00:00" 
                                         Value="0,0,0,-50"/>
                <EasingThicknessKeyFrame KeyTime="0:0:1" 
                                         Value="0,0,0,0">
                    <EasingThicknessKeyFrame.EasingFunction>
                        <CircleEase EasingMode="EaseInOut"/>
                    </EasingThicknessKeyFrame.EasingFunction>
                </EasingThicknessKeyFrame>
                <SplineThicknessKeyFrame KeyTime="00:00:03" 
                                         Value="0,0,0,0"/>
            </ThicknessAnimationUsingKeyFrames>
        </Storyboard>

Wie gesagt wird die Meldung nicht als "VerticalAlignment="Center"",
sondern eher als "...="Bottom"" dargestellt.

Ich weiss nur nicht wieso...

17.03.2020 - 12:32 Uhr
dr[10].ToString() == "Offen"  

versuchst du auf das 10 Row Element deiner einen Row zuzugreifen.

mit


DataRow[10].ToString();

greife ich auf den 11. Wert des Array (Datarow) zu

16.03.2020 - 15:29 Uhr

Moin,

Ich habe eine DataTable und habe diese für ein DataGrid gefiltert:

dt.DefaultView.RowFilter = string.Join(" AND ", fffilter.ToArray());

Nun möchte ich mit dieser View berechnungen durchführen, aber ich erlange (anscheinend) kein Zugriff auf die Rows, für so eine Sache z.B.:


                DataRow dr;
                offen = 0;
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    dr = dt.Rows[i];
                    if (dr[10].ToString() == "Offen")
                    {
                        _ = decimal.TryParse(dr[9].ToString(), out decimal off);
                        offen += off;
                    }
                }
                Status.Text += offen.ToString("C", CultureInfo.CurrentCulture) + "\n";

MVVM beherrsche ich nicht genügend um damit dasselbe und gewünschte zu erschreiben.

Wäre für Vorschläge weit offen... Danke

20.02.2020 - 13:29 Uhr

Was vergleichen?

Um konkret zu sein, habe ich 2 CSV-Dateien - a und b.
Bei jedem Eintrag in a soll anhand eines Wertes, Übereinstimmungen in b gesucht,
ein weiterer Wert der gleichen Zeile in b ausgelesen und in a eine weitere Zeile mit diesem Wert ergänzt werden.

Das mit den 2 Datatables und For-Schleifen funktioniert, gefällt mich jedoch nicht so richtig...

Habe Skilllevel: Umschüler 2. Klasse

20.02.2020 - 08:30 Uhr

Mit ging es ja erstmal um das Vergleichen an sich. Weniger um die Objekte.
Also womit (IList<>, ObservableCollection, DataTable, etc, Pipapo) man ab besten vergleichen kann,
bzw in welcher dieser Klassen Properties enthalten sind, die dies vereinfachen oder effizienter machen.

19.02.2020 - 08:32 Uhr

Moin, ich würde für ein Projekt 2 Tabellen (oder etwas Tabellenartiges, -ähnliches/Daten in tabellarischer Form)
vergleichen und entsprechend ergänzen,d.h. Daten von einer "Tabelle" in eine andere.
Habe ich bislang mit DataTable's und For-Schleifen.
Geht das auch eleganter? Womit macht Ihr das so?

Unidirektional, Quelle: 2 CSV-Dateien

06.02.2020 - 16:06 Uhr

verwendetes Datenbanksystem: <MySQL>

Ich habe ein Datenbankproblem, eher ein Beziehungsstrukturelles.

1 Händler, 1 Lieferant (Bestellungen und Lieferungen/Lieferscheine) und Prioritäten

Habe schonmal: eine Artikelliste, 2 Bestellungen, 2 Lieferungen und eine Prioritätsliste
(noch) keine Fremdschlüssel

Wenn der Lieferant liefert (Tabelle: Lieferschein_Bla_001, ...) soll in den Bestelllisten (Bestellung_Bla_001, ...) der Wert für "Geliefert" erhöht werden. Gleichzeitig soll in der Prioliste der Wert für die PrioMenge verringert werden.

Nun könnte man das mit "etwas" C# Logik lösen, ich sähe es aber gerne wenn die Mengenberechnung nicht absolut in Feldern "geliefert, Priomenge" geschrieben wird, sondern errechnet, dynamisch und Fehler/Korrekturtolerant, Ihr versteht?

ich komme nur nicht drauf wie man das hinbekäme.

Wie immer auch diesmal, ein Wink mit dem Zaunpfahl in die richtige Richtung hülfe auch.

Danke

29.01.2020 - 11:15 Uhr

Und Datenbankabfragen (SQL) sollten in einer eigenen Datenzugriffsschicht erfolgen...

Ja ich weiss, genau das krieg ich nicht hin - deswegen Klassen in CodeBehind und der ganze Ärger ...

29.01.2020 - 09:39 Uhr

Ich habe ein Control in dem ein:
Datagrid (ICollectionView1 von ObservableCollection - in dieser Problematik irrelevant)
Textblock und co (Model) und ein
Button => DialogHost mit einer Artikelübersicht (ICollectionView2 von selbiger ObservableColl... + Filter) enthalten ist.

Nun wollte ich gerne das die Abfrage der CollectionView2, die Darstellung in Textblock und co und die Abfrage für ein SQl-Query über ein Model (ein und dasselbe) läuft. Aktuell mache ich das Altmodisch.

Der XAML für die ListView im DialogHost (für Abfrage der Auswahl)


                            <ListView x:Name="DH_List" Margin="4"
                                      ItemsSource="{Binding ArtikelView}">
                                <ListView.ItemTemplate>
                                    <DataTemplate>
                                        <DockPanel>
                                            <TextBlock Text="{Binding ID}" Width="30" Margin="4"/>
                                            <TextBlock Text="{Binding Name}" Margin="4"/>
                                        </DockPanel>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                            </ListView>

Aktuelle Abfrage:


        private void Btn_Artikelauswahl_Click(object sender, RoutedEventArgs e)
        {
            stackP.Visibility = Visibility.Visible;
            Eintrag item = (Eintrag)DH_List.SelectedItem;
            eintrag.ID = item.ID;
            eintrag.Artikelnummer = item.Artikelnummer;
            eintrag.Menge = item.Menge;
            eintrag.Datum = item.Datum;
            eintrag.Name = item.Name;

            //Tb_ID.Text = item.ID.ToString();
            //Tb_Artikelnummer.Text = item.Artikelnummer;
            //Tb_Menge.Text = item.Menge.ToString();
            //Tb_Datum.Text = item.Datum.ToString();
        }

Wie kann ich im CodeBehind das Model "ansprechen"? Oder wo liegt mein Denkfehler?
Ich mache das aktuell mit Element.Content = "BlaBla" weil ich gewisse Funktionen (SQL) nicht aus dem Codebehind rauskriege und daher verwendete Klassen in CodeBehind initialisieren muss.

ich bitte um Nachsicht falls mein Anliegen ungenügend dargelegt wurde. (Fragen!)

23.01.2020 - 11:36 Uhr

... UNION ALL liefert alle.

Jo, Danke das wars

22.01.2020 - 15:32 Uhr

verwendetes Datenbanksystem: <MySQL>

Ich möchte mehrere Tabellen zusammenbringen und Werte der Einträge dort falls doppelt addieren.
Habe es mit UNION versucht aber nach einer genauen Betrachtung wohl eher nicht.
Ich habe nur keine Vorstellung wie man das bewerkstelligen könnte.

So in etwa... Die Anzahl der Tabellen ist variabel


SELECT
    Nummer,
    Name,
    SUM(Menge1) AS Menge1,
    SUM(Menge2) AS Menge2
FROM
    (
SELECT * FROM Tabelle1

        UNION
SELECT * FROM Tabelle1

        UNION
SELECT * FROM Tabelle1
)
GROUP BY
    Nummer

Auch ein Wink in die richtige Richtung ist hilfreich...

14.01.2020 - 09:16 Uhr

Dein UI (=XAML) sollte nichts von deinem Datenlayer (=XML via XDocument, XElement) wissen.

...weiss es auch nicht, spielt sich alles in der Programmlogic ab.

Habe das jetzt händisch gelöst, hoffentlich...
Ein String, der mit File.Write gespeichert wird.

Um das professionell zu lösen bin ich zu unerfahren (in Umschulung) und habe keinen Denkansatz. Ich hoffte auf einen kleinen Schubs in die richtige Richtung.

13.01.2020 - 08:46 Uhr

Moin, ich möchte eine Sammelüberweisung mit XML erstellen. Aktuell verwende ich XElement und XDocument. An sich kein Problem.
Aber bei einer Sammelüberweisung jedoch werden die einzelnen Überweisungen als Überladungen in einem XElement dargestellt.
Gibt es eine Möglichkeit diese in ihrer Anzahl zu variieren?
IList/ICollection? Oder ganz anders?

Danke

09.01.2020 - 12:05 Uhr

VS2019: Durch Verwendung ein paar Nuget-Paketen hat sich durch Abhängigkeiten ein Rattenschwanz an zusätzlichen DLLs ergeben. Kann ich die in ein Unterverzeichnis "..\DLL" ablegen?

Leider bin ich mir auch nicht sicher unter welchen Begriffen ich dabei suchen soll, es hatte sich noch keine Notwendigkeit dafür ergeben.

Auch ein grober Hinweis zum Weiterbilden und -suchen wäre hilfreich.

Danke

09.01.2020 - 10:31 Uhr

Danke glandorf, hat geklappt. Ein Eintrag korrigiert und Fremdschlüssel erstellt.

09.01.2020 - 09:57 Uhr

gibt es in der Tabelle Rechnungen eine Liferanten-ID, die es in der Tabelle Lieferanten nicht gibt?

Theoretisch möglich, da immer wieder Lieferanten hinzukommen, gelöscht werden.
Auch wenn es dann die betreffende Rechnung nicht tangiert hatte.

Kann das ein Grund für eine Fehlermeldung sein?

09.01.2020 - 09:21 Uhr

Sagt wer?

Wie gesagt, je nach dem welches Tutorial man besucht. Ich beziehe mich bei MVVM auf Tutorial- und (YouTube)Video-Wissen und auf Beiträge in solchen Foren.

In jenen Tut's ist auch keine Rede von Präsentationschichten und dergleichen und was wo rein gehört.

Diese (die meisten...?) Informatiker sind leider oft mit einer Art Betriebsblindheit geschlagen und gehen in Erläuterungen von IHREM EIGENEN Kenntnisstand aus und implizieren diesen beim Lehrsuchenden.

09.01.2020 - 09:07 Uhr

verwendetes Datenbanksystem: <MySQL>

Hallo, ich habe 2 Tabellen die über eine 1:N beziehung verknüpft werden sollen.
In fraglicher Spalte die den Fremdschlüssel (N) enthalten soll, befinden sich bereits einige Einträge. Fragliiche Tabelle habe ich von MyISAM in INNODB umgewandelt.

SQL-Befehl:

ALTER TABLE `Rechnungen` ADD  FOREIGN KEY (`LID`) REFERENCES `Lieferanten`(`idLieferanten`) ON DELETE RESTRICT ON UPDATE RESTRICT;

Daraufhin bekomme ich folgende Fehlermeldung:

Fehlermeldung:
#1452 - Kann Kind-Zeile nicht hinzufügen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (d02e82d4.#sql-f73_2c0956, CONSTRAINT #sql-f73_2c0956_ibfk_1 FOREIGN KEY (LID) REFERENCES Lieferanten (idLieferanten))

In einer 2. Datenbank mit ähnlichen Bedingungen war der Fremdschlüssel ohne Probleme zu erstellen.

Ich habe keine Ideen mehr.

Danke für Hilfe

08.01.2020 - 11:19 Uhr

Datenbankzugriffe gehören überhaupt nicht in die View.

Ja, ich habe mich mißverständlich ausgedrückt. Ich meinte das ViewModel.

Auch wenn (je nach dem welches Tutorial) die einen sagen in etwa: "Logic und Datenbankzugriffe und Zeuchs gehören in das Model"
und die anderen: "... gehören in das ViewModel, ist doch Sonnenklar!" - janee, is nich klar...

Ist wohl wie die alte Frage: Beatles oder Rolling Stones?

07.01.2020 - 09:05 Uhr

Gibt es irgendwann eine OutOfMemoryException?

Wie hast du das denn überhaupt gemessen? Mit einem Profiler? Mit dem Taskmanager?

In Visual Studio, die Speicheranzeige

So sollte man seinen Anwendungsstatus aber nicht steuern.

Ich weiss, dass das unsauber ist, hatte zu dem Zeitpunkt kaum eine Wahl, werde mal schauen ob es anders geht.

MVVM wäre mein Ziel und die Mutter aller Lösungen aber ich bekomme aber manche Dinge nicht hin. Wie z.B. einen SQL Query (incl. Pipapo) im ModelView.
Auch steigt der Speicherverbrauch stetig an (Weil ich das MV im CodeBehind aufrufen/instanzieren muss um Daten von MySQL darin zu speichern).
In der Berufsschule wird MVVM leider nicht drangenommen und Tutorials sind leider oft spezifisch, nicht Allgemein und verständlich.

06.01.2020 - 16:02 Uhr

Warum machst Du das nicht einfach über XAML?

Der Aufruf der Seiten? Ich nahm an dies wird im CodeBehind gemacht...
Ich schau mal wie das gemacht wird.

So bist Du selbst in der Verantwortung Objekte zu disposen (was Du nicht tust), damit der Speicher aufgeräumt wird.

Wie schon gesagt, hatte ich die Info das der Inhalt einer Page gelöscht wird wenn man diese verlässt. Aber wenn ich den Aufruf im CodeBehind mache muss ich alles manuell löschen(disposen?)?

Na lustig...

06.01.2020 - 14:40 Uhr

Ich verwende die NuGet-Pakete von MaterialDesign.

Bei meinem Projekt habe ich ein Hauptfenster in dem im Wesentlichen nur das Frame und ein paar Buttons enthalten sind. Über ein Button lässt sich zwischen 2 Pages wechseln.
Nach jedem Wechsel steigt der Speicherverbrauch um ein paar MB, obwohl die Pages und alle Inhalte eigentlich gelöscht sein sollten. (KeepAlive=false)

Ich verstehe nicht warum. Der Projektcode ist auch zu groß um es hier zu posten.

Code für den Aufruf/Wechsel:


            if ((App.Current as App).MainWindowButtonReLief == "L")
            {
                Storyboard sb1 = FindResource("Dreh1") as Storyboard;
                sb1.Begin();
                if (sb1.GetCurrentState() == ClockState.Stopped)
                {
                    Lbl_ReLie.Content = "Rechnungen";
                    Pi_ReLief.Kind = MaterialDesignThemes.Wpf.PackIconKind.FormatListNumbered;

                    Storyboard sb2 = FindResource("Dreh2") as Storyboard;
                    sb2.Begin();

                    (App.Current as App).MainWindowButtonReLief = "R";
                    Frame.Navigate(new Lieferanten());
                }

Danke

05.12.2019 - 10:57 Uhr
  1. Stimmt
  2. Da kommt: Kann nur auf &quot;Style&quot; mit einem Zieltyp basieren, bei dem es sich um den Basistyp &quot;IFrameworkInputElement&quot; handelt. ?(
05.12.2019 - 10:38 Uhr

Moin, ich habe eine Combo und möchte für ein Projekt die Visibility von Datumsfeldern basierend auf der Auswahl des ComboItems einstellen, an sich keine große Sache.
Ich verwende jedoch MaterialDesignThemes von James Willock.

Das ganze sähe so aus:


                        <DatePicker VerticalContentAlignment="Center" 
                                    HorizontalContentAlignment="Right" 
                                    materialDesign:HintAssist.Hint="Von:" 
                                    FontSize="18"
                                    x:Name="D_BelegVon"
                                    Foreground="Black" 
                                    Width="220"
                                    SelectedDateChanged="d_Von_SelectedDateChanged"
                                    Visibility="{Binding IsSelected,ElementName=Combo_Beleg}">
                            <DatePicker.Style>
                                <Style Resources="{StaticResource MaterialDesignFloatingHintDatePicker}">
                                    <Setter Property="DatePicker.Visibility" 
                                            Value="Hidden"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=Combo_Datumsauswahl, Path=SelectedItem.Tag}" 
                                                     Value="Show">
                                            <Setter Property="DatePicker.Visibility" Value="Visible"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </DatePicker.Style>
                        </DatePicker>

Die Stelle mit :

 <Style Resources="{StaticResource MaterialDesignFloatingHintDatePicker}"> 

funktioniert nicht - es soll
die zugrunde liegende Idee kommuniziert werden.

Ich würde ansonsten selbiges im CodeBehind realisieren, wüsste jedoch ob das mit MaterialDesign und XAMLgeht.

Danke

26.11.2019 - 12:43 Uhr

Du kannst doch einfach im ViewModel eine weitere Eigenschaft erstellen, welche wert + währungssymbol als string zurückgibt und daran dann binden.

Stimmt... die Eigenschaft muss nicht im Model sein, sondern wird nur zum Anzeigen des Wertes + Währung verwendet.

Danke, probiere ich

25.11.2019 - 10:14 Uhr

Wie soll das System denn automatisch von "EUR" auf "€" schließen?

Über eine Abfrage/Methode im ViewModel

Wenn du die Culture aber angibst, dann kannst du mittels new Culture(culture).NumberFormat.CurrencySymbol
das dazugehörige Währungssymbol auslesen.

Das Problem ist weder das Anzeigen noch das Auslesen des Währungssymbols.
Etwas oberhalb im XAML-Code siehst du wie ich das Währungssymbol momentan anzeige.
Es wahrscheinlich gäbe noch andere Varianten. Da ich Binding und MVVM benutze,
kann ich beim Symbol nicht über sowas wie wert += währungssymbol verwenden.

Aber ich werde mir Format in Bindings mal genauer ansehen

22.11.2019 - 12:32 Uhr

Nein, in der Combo für die Währung steht: EUR, PLN, CZK
Nach dem Betrag soll dann stehen 100,00 € u.s.w.

22.11.2019 - 11:52 Uhr

...zeig wenigstens mal einen Screenshot.

Da würde man auch nur Textfelder (wo man den Betrag eingibt) und Combos (z.B. mit der Währung) sehen.

Ich habe eine Page in der u.a. ein Geldbetrag eingegeben werden kann. Diese Textbox (und die Währungs-Combo) hat ein Binding zu einee MVVM-Klasse.
ALs NuGet habe ich MaterialDesignThemes von James Willock verwendet.
Die Anzeige der Währung erfolgt w. o. beschrieben durch "StringFormat=C".
Nun möchte ich gerne, dass wenn ich in der Combo irgendeine Währung auswähle, das Voreingestellte Language="DE-de" ersetzt wird oder das ich in irgendwiner anderen Form das "€" in jenes Währungssymbol einstelle die dazu passt.
Es soll nicht die CultureInfo der ganzen Seite geändert (z.B. Ein Kalender oder DatePicker - immer "DE-de") werden, sondern ausschließlich in den erforderlichen Controls.

Auch ein simples Hinzufügen des Währungssymbols zu dem Betrag (ist ein decimal) wäre annehmbar, oder jedwede andere Variante damit z. B. statt 100,00 €, 100,00 Z? steht.

Es (€, Z?) darf eben nur nicht in der Property für den Betrag stehen.

Besser kann ich es nicht darlegen.

21.11.2019 - 10:35 Uhr

Vermute, dass hier je nachdem mehrere Art und Weisen in Frage kommen:

  • Custom Format in Binding

             <Binding Path="NettoWert"
                         StringFormat="C"
                         ConverterCulture="PL-pl"/>

ConverterCulture nimmt keine DynamicRes. oder sonst irgendwas an nur CultureInfos

  • Eigener IValueConverter mit entsprechend spezifischer Culture-Information
    .. bestimmt noch mehr

Nach dem IValueC. schaue ich mal

Vermute aber auch, dass Du mit dem Bedarf nicht der Erste bist und sicher 10000 Varianten auf Google findest 😃
Kannst die passenden Treffer ja hier posten.

zum 1. Wahrcheinlich nicht, leider nicht - was ich vorhabe ist zu spezifisch, hab ich schon - ich weiss nicht mal wie ich formulieren soll
2. Auf jeden Fall

20.11.2019 - 16:30 Uhr

Hallo, ist nicht ganz einfach mein Problem zu erläutern.

In meiner View hat es mehrere Textboxen, und u.a. eine Combo mit 3 Währungen drin.
Nun möchte ich NUR in dieser Box und NUR die Währung ändern je nach dem welche in der Combo eingestellt ist. Leider nimmt ConverterCulture nur "DE-de" an.

Hat jemand eine Idee?

17.11.2019 - 11:56 Uhr

Habe es hinbekommen, Danke


            var fff = f.Where(m => !string.IsNullOrEmpty(m));

            l01.Content = string.Join(" und ", fff);

Ich dachte es sei irgendwas komplizierteres..., es war eher noch einfacher XD

16.11.2019 - 15:12 Uhr

Du brauchst du nur die leeren Werte aus dem Array zu filtern:

filter.Where(m => !string.IsNullOrEmpty(m))  

Oder habe ich was falsch verstanden?

Nein, funktioniert nicht - nichts was ich versuche funktioniert 🤔


            string[] f = { _c1, _c2, Tb_01.Text, Tb_02.Text, Tb_03.Text, _schalter };
            f.Where(m => !string.IsNullOrEmpty(m));
            l01.Content = string.Join(" und ", f);

16.11.2019 - 14:14 Uhr

Du kannst die gebundene Quelle problemlos mit Linq und entsprechenden Expressions vorfiltern, bevor die gebunden wird.
Dann brauchste diese String-Frickerlei nicht.

Meinst du so:


            IEnumerable<string> filter1 = from str in f where str != "" || str != null select str;
            var fii = new List<string>();
            foreach (string str in filter1)
            {
                fii.Add(str);
            }
            Ergebnis3.Text = string.Join(" und ", fii);


Namen sind Wurscht, da Code nur zur Übung dient

f ist ein Array mit Werten aus Combos und Textboxen, die strings in diesem Array können/dürfen auch mal null oder leer oder sonstwas sein. Dann müssen die strings raus.

15.11.2019 - 14:23 Uhr

Ich möchte Strings für einen Datatable Filter verketten, nach folgendem Schema:

dt.DefaultView.RowFilter = string.Join(" AND ", filter)

Als Quelle nehme ich ein Array (filter). Soweit so gut.

Wenn ein String des Arrays jedoch keine Daten enthält (""), werden die Strings dennoch verkettet:

Wert1 = 'bla' AND Wert2 LIKE 'blabla' AND

Natütlich könnte ich auch Tonnenweise Zeilen schreiben mit Zahllos verschachtelten IF's und dergleichen, aber da muss es doch was besseres geben... mir fällt nur nichts ein

14.11.2019 - 14:54 Uhr

Da du dich ja schon mit MVVM beschäftigst...

beschäftigen ist gut...

Es gibt noch Aspekte die nur sehr schwer zu verstehen sind.
Und Tutorials sind nicht immer hilfreich. Bis auf dieses hier.
Leider muss ich noch eine Klasse mit 20 Eigenschaften damit bedienen.

14.11.2019 - 14:17 Uhr

Hallo, ich möchte wie gesagt mithilfe eines Button in einer Page
(wäre ein Control hierfür besser geeignet?)
eine andere Page aufrufen incl. Ünerladung.
Die Aufgerufene Seite ist jedoch leer.


            DataRowView dataRowView = (DataRowView)dgw.SelectedItem;
               if (dataRowView != null)
                  {
                      int Zeile = Convert.ToInt32(dataRowView.Row[0]);
                      NavigationService.Navigate(new Seiten.Rechnung(Zeile, true));
                   } 

Auch wollte ich das jener Aufruf eine Änderung des Content
eines Buttons im MainWindow nach sich zieht. (habe hierzu ein Snippet verwendet)
Tut es zwar, aber da steht nicht: Some.Content += " bearbeiten",
sondern irgendwas mit Stackpanel


                var mw = Application.Current.Windows
                                    .Cast<Window>()
                                    .FirstOrDefault(window => window is MainWindow) as MainWindow;

                mw.Btn_Rechnung.Content = "Rechnung bearbeiten";

bei letzterem Blicke ich schon gar nicht durch, hoffte aber es würde wenigstens funktionieren...

Danke für Rat und Schlag.

14.11.2019 - 13:50 Uhr

Hat funktioniert, Danke

13.11.2019 - 13:04 Uhr

[Artikel] MVVM und DataBinding

Bei der Umsetzung als Übung für MVVM habe ich den Code nahezu 1:1 übernommen (abgeschrieben)
und erhalte folgende Ausnahme:

Fehlermeldung:
System.InvalidOperationException: "TwoWay- oder OneWayToSource-Bindungen
funktionieren nicht mit der schreibgeschützten Eigenschaft "VollName"
vom Typ "WPF_MVVM_CHILD_ÜBUNG.MainWindowViewModel"."

Danke für Hilfe.

07.09.2019 - 19:17 Uhr

Hallo, für meinen Praxisbetrieb soll ich eine App schreiben (u.a.) Terrassendielen darstellt in einem begrenzen Bereich und die soll maßsstablich Korrekt sein.
Die Dielen werden horizontal angeordnet und der Verschnitt berechnet und angezeigt und dann vertikal. Wie man Dielen auf einer Terassen nun mal verlegt.

Ich habe dabei mit rectangle probiert und auch ein rect-array in Erwägung gezogen. habe jedoch Probleme mit dem Maßstab. Die Dimensionen der Terrasse sind ja immer anders, die Form immer gleich groß, soll dennoch passens sein.

Welche anderen Möglichkeiten würden euch einfallen (darf auch ausgefallen sein, Hauptsache als Terassendielen erkennbar).

Wenn ich das nicht einleuchtend rübergebracht habe, hole ich das gerne auf Anfrage gerne nach.

Danke im Vorraus.

M.Rothe

16.08.2019 - 16:08 Uhr

Habe in INT umgewandelt und funzt

...Wald vor lauter Bäumen nicht gesehen...

16.08.2019 - 15:40 Uhr

varchar(45) - Facepalm...
aber wenn dass das Problem ist warum wurde im Juli richtig ermittelt?

16.08.2019 - 14:53 Uhr

verwendetes Datenbanksystem: <MySQL, MyISAM>

Moin,

ich werwende für die Ermittlung des höchsten Wertes innerhalb eines Monats (wird am Anfang jedes Monats auf 1 gesetzt) folgenden einfachen Query:


SELECT MAX(`LfdNr`) FROM `Rechnungen` WHERE YEAR(`Belegdatum`) = XXXX AND MONTH(`Belegdatum`) = XX

Diese Abfrage klappt auch für den Juli.
Nur im August wurde der MAX nur bis 9 abgezeigt, die 10 (mittlw. schon mehrfach) nicht mehr. Auch die 11, per Hand eingetragen wird nicht gewertet.

Update: Zahlenwerte jetzt von 2-19
Wenn ich:
SELECT * FROM Rechnungen WHERE MONTH(Belegdatum) = 8
eingebe erhalte ich eine korrekte Antwort (18 Einträge, 2-19), mit Max(LFDNR) nur die 9

Habe nicht den geringsten Schimmer was da falsch ist...

Danke im Vorraus

07.08.2019 - 11:11 Uhr

Ja Danke, genau das war's
Ich dachte ein zweites LEFT JOIN würde sich auf das die 2. Tabelle beziehen und nicht auf die 1. 🤔 und somit nicht funktionieren. Bzw. ich verstehe dies grundlegen falsch und sollte mit das mal genauer anschauen 😁