Laden...
E
Easyrider
myCSharp.de - Member
35
Themen
200
Beiträge
Letzte Aktivität
vor 11 Jahren
Dabei seit
18.12.2006
Alter
39
Beruf
Anwendungsentwickler
Herkunft
Bayern
Website
Blog
Erstellt vor 11 Jahren

Da ich aus Bayern, und um genau zu sein aus Niederbayern komme, wird bei uns traditionell am 1. Mai der Maibaum aufgestellt. Den Rest des Tages mit den Kindern gespielt oder im Garten entspannt. 😉

Erstellt vor 12 Jahren

Beispielprojekt siehe Anhang

Erstellt vor 13 Jahren

Hallo Herbi,

ja, du hattest Recht. Durch einen Bug ist die Spalte leider als String hinzugefügt worden.

Vielen Dank für den Tip. 👍

mfg

Stefan

Erstellt vor 13 Jahren

Hallo,

in einer meiner Anwendungen bin ich gerade auf ein Problem gestoßen, das ich alleine + Suche in Google + MSDN nicht lösen kann.

Aufgabenstellung:

Die Anwendung bekommt ein Dataset via DataSet.ReadXML. Es ist keine Datenbankanbindung dahinter vorhanden. Jetzt muss auf das DataSet ein Filter gesetzt werden. Dies geschieht über eine DataView mit einem RowFilter. Der Benutzer muss den Filter in einer Textbox eingeben können. Bei der Eingabe des Filters kann es zu Berechnungen kommen.

Beispiel:

Dataset mit 100 Einträgen:

Spalten A zeigt die Werte für einen Minimalwert an, beispielhaft 1 - 100.
Spalte B zeigt die Werte für einen Maximalwert an, beispielhaft 100 - 1000.
Spalte C zeigt die Werte für einen aktuellen Wert an, der irgendwo zwischen Minimal- und Maximalwert liegt.

In der Berechnung soll der Benutzer eine Formel wie folgt eingeben können:

AktuellerWert > MinimalWert * 1,1

Wenn ich so etwas in einem richtigen DataView eingebe, dann schafft er es nicht den Wert für MinimalWert zu finden. Es kommt die Fehlermeldung, das die Operation "*" mit System.String nicht durchgeführt werden kann. Bedeutet, er kann den Text MinimalWert nicht mit dem Wert der Spalte ersetzen.

Hat jemand eine Idee, wie ich das Problem lösen könnte?

mfg

Stefan

Erstellt vor 13 Jahren

Hallo,

ich beantworte mir meine Frage mal selbst, falls andere das Problem auch noch haben.

Das DataGrid kann anscheinend keine Bindings per ElementName auf einzelne Einträge in einer Row. Man kann das Problem umgehen, indem man einen DataContextProxy benutzt. Die vollständige Lösung dazu findet ihr hier.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace JobPlan.Controls
{
    public class DataContextProxy : FrameworkElement
    {
        public DataContextProxy()
        {
            this.Loaded += new RoutedEventHandler(DataContextProxy_Loaded);
        }

        void DataContextProxy_Loaded(object sender, RoutedEventArgs e)
        {
            Binding binding = new Binding();
            if (!String.IsNullOrEmpty(BindingPropertyName))
            {
                binding.Path = new PropertyPath(BindingPropertyName);
            }
            binding.Source = this.DataContext;
            binding.Mode = BindingMode;
            this.SetBinding(DataContextProxy.DataSourceProperty, binding);             
        }

        public Object DataSource
        {
            get { return (Object)GetValue(DataSourceProperty); }
            set { SetValue(DataSourceProperty, value); }
        }

        public static readonly DependencyProperty DataSourceProperty =
            DependencyProperty.Register("DataSource", typeof(Object), typeof(DataContextProxy), null);


        public string BindingPropertyName { get; set; }

        public BindingMode BindingMode { get; set; }
        
    }
}

Sobald man diese Klasse in den StaticResources einbaut und die Property mit Binding Source={StaticResource DataContextProxy},Path=DataSource.MeineProperty anspricht, dann gehts.

Was ich mich noch frage ist, warum es im DataGrid nicht geht. Das konnte ich leider noch nicht beantworten. Falls jemand die Antwort weiß, würde ich mich freuen wenn Sie mir jemand beantwortet.

mfg

Easy

Erstellt vor 13 Jahren

Hallo winsharp93,

wir verwenden bei unserem Projekt eine vergleichbare Implementierung von ICommand. Diese wurde bereits über hundert Mal benutzt, da vermute ich keine Probleme.

Wenn ich anstatt eines Buttons eine Checkbox hinbaue und das IsChecked={Binding IsSelected} setze, dann geht das. Selbst wenn noch das Command dabei steht. Aber mehr leider auch nicht. Der Command wird wieder nicht ausgeführt.

Folgende Ideen hatte ich noch über Nacht, aber die muss ich noch überprüfen:

  • Das DataGrid registriert die Commands und bearbeitet sie, somit bekomme ich sie nie.
  • Die Checkbox selbst registriert das Click-Command und behandelt es.

Werds mir heute Vormittag nochmal genauer angucken.

Erstellt vor 13 Jahren

Hallo,

ich habe aktuell ein Problem mit verschachtelten DataTemplates und Command-Binding und finde einfach keine Lösung. Folgende Problemstellung:

In meiner View habe ich einen TemplateSelector, der mir je nach Einstellung eines von drei verschiedenen Grids anzeigt. Die Grids liegen somit in einem DataTemplate. Innerhalb eines Grids muss ich nun eine Spalte anzeigen, welche wiederum ein eigenes DataTemplate hat. In diesem DataTemplate liegt nun ein Control, das einen Command aus dem ViewModel ausführen soll.

Der DataContext der Grids ist an das ViewModel gebunden. Leider reicht das aber nicht. Der Command bzw. das Command-Binding wird nie aufgerufen. Egal welche Lösung ich probiere. Folgende Dinge bin ich schon durch:

  • DataContext innerhalb des DataTemplates noch einmal setzen (per ElementName mit Grid und TemplateSelector)
  • Command via normales Binding setzen
  • Command via RelativeSource=RelativeSource TemplatedParent setzen
  • Command via ElementName (Grid + TemplateSelector) setzen

Bei Google habe ich heute bestimmt schon eine Stunde gesucht. Hat jemand eine Idee, wie ich das Problem lösen könnte? Es muss doch eine Lösung dafür geben... Wahrscheinlich seh ich nur den Wald vor lauter Bäumen nicht mehr.

mfg

Easy

Erstellt vor 13 Jahren

Zurück zum Thema:

Wie könnt ihr euch da motivieren?

Bei mir ist es meistens eine Mischung aus allem. Ich höre manchmal (vor allem nach 10 Stunden aufwärts) Technobase.fm oder Hardrock.fm, damit mein Hirn nicht wegdöst. Bei richtig langweiligen Arbeiten versuche ich, sie immer so schnell wie möglich hinter mich zu bringen. Nix aufschieben, nicht warten. Sofort erledigen. Dann hat man es hinter sich. Und man kann wieder an interessanteren Dingen arbeiten.

Sollte ich dazwischen mal fünf Minuten Pause brauchen, um den Kopf frei zu kriegen, surf ich entweder oder geh mal kurz einen Tee holen. Aber nicht länger, sonst geht die Motivation flöten.

Ich weiß das die meisten Menschen versuchen, ungeliebte Arbeiten auf die lange Bank zu drücken. Oder sie geben sie anderen Kollegen. Aber die Arbeit bleibt die gleiche. Wenn man sich angewöhnt hat, so etwas sofort zu machen, quält es einem nicht mehr, und man hat den Kopf frei für wichtigere Dinge.

Just 4 your Info

Easy

Erstellt vor 13 Jahren

Hallo hypersurf,

hab deinen Quellcode kopiert und in ein komplett leeres Projekt eingefügt. Der Fehler ist einfach nachzuvollziehen. Leider macht er keinen Sinn. Es sieht so aus, wie wenn das Polygon bei dem Punkt einfach fünf Pixel hinzufügt.

Wenn man den Punkt X2 auf 390 legt, dann stimmt die Zeichnung:

        <Canvas Height="600" Width="400">
            <Polygon Stroke="Black">
                <Polygon.Points>
                    <Point X="201.0" Y="135.0"/>
                    <Point X="390.0" Y="135.0"/>
                </Polygon.Points>
            </Polygon>
            <Polygon Stroke="Red">
                <Polygon.Points>
                    <Point X="377.0" Y="145.0"/>
                    <Point X="395.0" Y="135.0"/>
                    <Point X="377.0" Y="125.0"/>
                </Polygon.Points>
            </Polygon>
        </Canvas>

Als optionale Lösung würde ich vorschlagen, kein Polygon zu benutzen. Du hast ja nur zwei Koordinaten, was einer Linie entspricht:

<Canvas Height="600" Width="400">
            <Line X1="201.0" Y1="135.0" X2="395.0" Y2="135.0" Stroke="Black" />
            <Polygon Stroke="Red">
                <Polygon.Points>
                    <Point X="377.0" Y="145.0"/>
                    <Point X="395.0" Y="135.0"/>
                    <Point X="377.0" Y="125.0"/>
                </Polygon.Points>
            </Polygon>
        </Canvas>

Hier funktioniert 395.0 einwandfrei.

mfg

Easy

Erstellt vor 13 Jahren

So, muss auch mal meine Erfahrungen dazu wiedergeben. Zu mir persönlich:

Ausbildung zum FIAE, dualles System mit Arbeit und blockweise staatliche Berufschule.

Von der Ausbildung her kann ich mich nicht über meine Berufschule beschweren. Die Themen über die drei Jahre verteilt vermitteln ein sehr gutes Basiswissen, auf dem ich aufgebaut habe. Meine Lehrer in den Fächern IT waren alle gut bis sehr gut.

  • Im Fach Anwendungsentwicklung Programmierung (C++) hatte ich einen sehr guten Lehrer, der einem die Fehler und Beispiele gut erklären konnte. Die Theorie der Objektorientierung ist zwar abstrakt, aber da muss man durch 😉
  • Im Fach Netzwerk war der Lehrer auch gut und hat es gerne an Praxisbeispielen gezeigt. Beispielsweise eigene Netzwerkkabel bauen, Netzwerke aufbauen etc.
  • In der Kategorie Unix hatte ich den besten Lehrer. Er war zwar streng, hat sich aber für jeden Zeit genommen und auch Erfahrungen weitergegeben, die unabhängig zum Thema sind. Beispielsweise war sein fachliches Wissen so gut, das er als als Forensiker bei der Polizei geholfen hat. Ein "touch" auf gewisse Dateien simuliert, das man an einer Datei gearbeitet hat 😉

Im Großen und Ganzen hängt die Ausbildung viel zu sehr von den Lehrern ab. Ob jetzt eine private oder staatliche Schule besser ist, kann man pauschal nicht beurteilen. Ich für meinen Teil hätte ohne die staatliche Berufsschule ziemlich viel Wissen versäumt, vor allem im Bereich Unix. Würde meine Ausbildung in der Schule nicht freiwillig gegen eine private eintauschen.

mfg

Easy

P.S.: Meine Berufschule war die Karl-Peter-Obermaier-Schule in Passau.