Laden...
Avatar #avatar-2329.gif
xxxprod myCSharp.de - Experte
Programmierer Österreich\Wien Dabei seit 13.04.2006 1.378 Beiträge
Benutzerbeschreibung

Forenbeiträge von xxxprod Ingesamt 1.378 Beiträge

14.07.2011 - 13:14 Uhr

Meine Vermutung: Ortsteil != Ortsteil aufgrund doppelt oder an unterschiedlichen Stellen erzeugter Objekte.

Wichtig ist hier die Gleichheit der Objekte: Wenn du die Objekte in deiner Liste und im Schüler nicht identisch sind, werden diese auch nicht automatisch selektiert.

Wenn das der Grund ist, kannst du entweder dafür sorgen, dass jeder Schüler nur Ortsteil Objekte aus dem bestehenden Ortsteile-Pool bekommt oder du überschreibst die Equals Methode und vergleichst intern auf Id oder sonst was.

Lg, XXX

14.07.2011 - 13:05 Uhr

Ich habe gerade meine Vermutung lokal getestet und bestätigt die wie folgt lautet:

Deine Abfrage dauert keine 10 Sekunden! Jedoch kann das Übertragen evt. länger dauern oder das lokale Verarbeiten(DataTable generieren). Der Timeout bezieht sich offensichtlich nur auf die Zeit, die die Abfrage selbst dauert.

Getestet habe ich eine Abfrage auf eine Tabelle, die ich 2x als Kreuzprodukt ausgelesen hab, welche zig Millionen einträge produziert hat. Das Übertragen hat ewig lange gedauert und trotz 1 Sekunde CommandTimeout keine Exception geworfen. Wenn ich aber in die Abfrage noch eine Where Like '%abc%' oder sowas eingebunden habe hat die Abfrage eindeutig mehr als 1 Sekunde gedauert und somit auch die erwartete Exception verursacht.

Lg, XXX

14.07.2011 - 11:19 Uhr

Hallo AnTri,

Müssen diese alle aufeinmal zum Client?
Ja, den auf dem Client wird dann entwender ein Diagramm oder ein Datenfile erzeugt. Es handelt sich dabei um Zeitreihen von Messwerten.

evt. könnte man die Daten die fürs Diagramm notwendig sind noch einmal bereits Server-Seitig auf ein notwendiges Minimum aggregieren sodass evt. nur mehr ein paar Hundert Datenzeilen für das Diagramm geladen werden müssen.

Lg, XXX

01.07.2011 - 12:35 Uhr

Die Load Methode ruft ein Instance Property auf welches jedesmal eine neue Instanz deiner Cache Klasse erzeugt. Diese Property hast du jetzt erst eingefügt?(weil im obigen geposteten Code hast du noch einen statischen Member).

Lg, XXX

01.07.2011 - 10:08 Uhr

Ich kann hier nirgends ein SingleTon Konstrukt ausfindig machen.

Der Konstruktor sollte private sein dann kann er auch nicht versehentlich aufgerufen werden.

Lg, XXX

//edit: siehe dazu auch Wikipedia - Singleton

28.06.2011 - 07:20 Uhr

Vielleicht eine Art Select-All wenn man auf einen Bereich klickt. Dann kann man auch bequem per Strg-C den Inhalt kopieren.

Lg, XXX

27.06.2011 - 12:55 Uhr

Es sollte meiner Meinung nach auch mit negativen Margin Werten funktionieren um relative Maße verwenden zu können.

Lg, XXX

01.06.2011 - 10:06 Uhr

Habs nicht probiert aber auf sowas habe ich schon lange gewartet!!! 😃

Hoffe bald einmal das Framework einsetzen zu können.

Lg, XXX

01.06.2011 - 08:42 Uhr

Hallo steve46,

besser wird man nur durch Übung und durch die Probleme auf die man stößt. Und dort wo du nicht selbst auf die Lösung kommst, stellst du einfach hier die Fragen. Ich würd sagen, sei einfach interessiert und probier allerhand aus. Dadurch kommt automatisch die Erfahrung.

Und eins kann ich dir Versichern: jeder Programmierer und sei er noch so "gut", hat seine Schwierigkeiten in dem einen oder anderen Bereich und dort muss er halt dann auch wie ein "Anfänger" nachlesen und andere Meinungen einholen. 😃

Also mach dir nichts draus. In dem du dich dafür interessierst und dich damit beschäftigst, sag ich mal, bist du am besten Weg "besser" zu werden.

Lg, XXX

30.05.2011 - 14:17 Uhr

OMG und WTF?

Warum sollten Methoden wegoptimiert werden? Code optimieren != aufräumen. Dafür ist der Entwickler schon selber zuständig. Wie sollen den zur Laufzeit eingelesene Assemblies funktionieren, wenn alle Methoden vom Compiler wegoptmiert wurden weil sie zur Compile-Time keiner gebraucht hat?

Und sich wegen Methodennamen und 100kb ernsthafte Gedanken machen? Sorry aber hast du sonst nichts zu tun?

Lg, XXX

27.05.2011 - 16:11 Uhr

Alternativ könntest du ein Datengebundenes Excel-File erstellen, welches sich die Daten selbst abruft: Using SQL Server Compact Edition Database with Excel

Lg, XXX

27.05.2011 - 15:55 Uhr

Du rufst die Methode mit nur einem Argument auf: Dispatcher.Invoke-Methode (DispatcherPriority, Delegate, Object),
obwohl du eigentlich die Variante mit beliebig vielen Argumenten aufrufen willst: Dispatcher.Invoke (DispatcherPriority, Delegate, Object, Object[])

Der Fehler mit der Parameteranzahl kommt auch daher, dass du als Argument(e) ein Object-Array übergeben hast.

Lg, XXX

//Edit: Die Überladungen sind aber auch ziemlich dumm gewählt mMn.

27.05.2011 - 14:30 Uhr

Hast du dir den Link angesehen? - Nein

24.05.2011 - 15:10 Uhr

Die DefaultView, deines DataTables sollte eigentlich die gefilterten Rows zur Verfügung stellen.

doch klicke ich einen Namen an (bei "gefilterterm" datagrid) entsprechen die Daten, die ich bekomme der ursprünglichen id der datagrid auflistung.

Was genau bedeutet das? Wie greifst du darauf zu? Per Index? Dann bleib wohl bei der DataView.

Lg, XXX

//Edit: Ansonsten kannst du auch über die selektierte DataGridViewRow die DataRow irgendwie rausholen was wahrscheinlich eher das ist was du brauchst?

24.05.2011 - 09:27 Uhr

Binding mit einem eigenen string Property und kümmerst dich ums Sammeln der Zeilen selbst. Am besten Sammelst du die Strings in einer Queue<T> und bei überschreiten der Maximalanzahl wirfst du immer das letzte wieder raus. Evt. könntest du von Queue<T> erben und diesen Mechanismus gleich direkt einbauen.
Diese neue String Property, welches du in deinem ViewModel zur Verfügung stellst, macht dann nichts anderes als bei get die Queue zu einem String zusammenzubasteln.

Oder warte! Ganz andere Lösung:(funktioniert nur, wenns ausschließlich zum Anzeigen gedacht ist.)
Speichere die Strings in einer ObservableCollection wobei du hier auch selbst darauf achten musst, dass nach überschreiten der maximalen Strings die ersten wieder rausgelöscht werden müssen. Binde diese Collection als ItemSource an eine ListBox (statt der TextBox) und schon hast du deine Auflistung.

Lg, XXX

20.05.2011 - 11:38 Uhr

Zu deinem Edit:

DependencyProperties braucht man dort, wo man auf Änderungen von gebundenen Properties reagieren will und wird soweit ich das sehe außschließlich in UI- bzw. FrameworkElementen verwendet.

Das DependencyProperty ist hier fehl am Platz. Ein einfaches Property mit INotifyPropertyChanged implementiert, reicht vollkommen:


    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private string _problem;
        public string Problem
        {
            get { return _problem; }
            set { _proplem = value; OnPropertyChanged("Problem"); }
        }

        private void OnPropertyChanged(string propertyName)
        {
             //...
        }
    }

Dabei darfst du aber nicht vergessen den DataContext für dein Window zu setzen. In deinem Fall ist das Window selbst der DataContext, was aber nicht heißt das es automatisch gesetzt ist:


        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
        }

und zuguterletzt musst du dann im Binding nurmehr auf das Property verweisen da sich der DataContext vererbt:


<TextBlock Text="{Binding Path=Problem}"/>

Lg, XXX

PS: Schau dir trotzdem die Links mal durch und versuch etwaige Beispiele nachzuvollziehen.

20.05.2011 - 11:29 Uhr

Tut mir leid, ich sehe hier kein Problem und keine Frage, die ich beantworten kann. In dem von mir geposteten Link steht mit Sicherheit alles drinnen was du zum Thema DependencyProperties anfänglich wissen musst.

Über die verlinkte Seite kommt man auch zu Bindings welche das Werkzeug sind um Daten von einem ViewModel an die View zu binden. Dazu könntest du dich auch gleich in das Thema MVVM einlesen um gleich den richtigen Umgang mit WPF zu lernen.

Wenn du dich nun einfach hinsetzen und Dinge ausprobieren würdest, würdest du schnell feststellen wie alles funktioniert und dort wo du nicht weiter kommst, ergibt sich automatisch eine Frage die man sicher leicht erklären kann. Ohne konkreten Problem gibts auch keine konkreten Antworten.

Lg, XXX

20.05.2011 - 11:10 Uhr

Welche Antwort erwartest du dir hier? Soll hier jemand das Konzept von DependencyProperties und WPF im Generellen für dich vorkauen? Vielleicht ließt du dir zuerst mal die Grundlagen dazu durch: DependencyProperties und stellst dann gezielt Fragen wenn du dich wo nicht auskennst.

Wenn du ein konkretes Problem hast, dann poste es auch und Frage gezielt nach einer Lösung.

Lg, XXX

18.05.2011 - 16:03 Uhr

Ich kann nicht erklären warum, aber irgendwie wird die View "wegrationalisiert" oder so und ist anscheinend im VisualTree nicht vorhanden weswegen sie mit RelativeSource nicht aufspürbar ist.

Was aber gehen sollte ist zuerst die ListView suchen und dann über die View Eigenschaft wieder runterhangeln:

{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=View.ItemWidth}

Lg, XXX

18.05.2011 - 15:09 Uhr

Ich schaffs nicht auf nur irgendeine Weise deinen Fehler nachzustellen.

Was ist local:CPlainView für ein Control?
Ist ItemTemplate ein eigenes Property? Wenn ja wie definiert und wo und wie verwendet?

Lg, XXX

//PS: Der Fehler sagt eigentlich eh schon alles aus und drückt auch meine Vermutung aus: In deiner Objekthierachie ist anscheinend vom DockPanel bis zum Window rauf nirgends ein Element vom Typ CPlainView dazwischen. Zumindest bekomm ich nur in solchen Fällen diesen Fehler.

18.05.2011 - 14:31 Uhr

Probier mal folgendes:

{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}}, Path=ItemWidth}

Lg, XXX

18.05.2011 - 13:14 Uhr

In Bindings kann man auch ein StringFormat angeben.

Lg, XXX

16.05.2011 - 09:13 Uhr

ORM und im Speziellen zum Beispiel das ADO .NET Entity Framework sind Werkzeuge und Begriffe die du denke ich suchst.

Lg, XX

13.05.2011 - 16:13 Uhr

Leider verstehe ich noch immer nicht was du damit bezwecken willst. Ich kann mir nicht vorstellen in welchem Szenario ich eine generische Klasse brauche, die aber ein nicht generisches Interface implementiert.

Du musst darauf nicht eingehen. Ich kann nur nichts weiteres dazu beitragen da ich den Sinn und Zweck deines Vorhabens nicht verstehe.

Lg, XXX

13.05.2011 - 15:11 Uhr

Wenn es ausschließlich intern verwendet wird, kannst du ja auch einfach object verwenden? So wie ich das verstehe, willst du einfach die Handhabung mit dem Generic Constraints einschränken. Das machen die zwei Methoden auch. Wie du die Objekte intern behandelst ist dann wieder eine andere Geschichte.

Lg, XXX

13.05.2011 - 14:36 Uhr

Dann wird wohl eine Überladung herhalten müssen. 😃



        static void Main(string[] args)
        {
            //Foo(5); //error
            Foo((int?)5);
            Foo((int?)null);
            Foo("bar");
            Foo((string)null);
        }

        static void Foo<T>(T item) where T:class 
        {
            if (ReferenceEquals(item, null))
                Console.WriteLine("Item is null");
            else Console.WriteLine(item);
        }

        static void Foo<T>(T? item)where T:struct 
        {
            if (ReferenceEquals(item, null))
                Console.WriteLine("Item is null");
            else Console.WriteLine(item);
        }

Lg, XXX

13.05.2011 - 14:33 Uhr

Ich kenn das genau Verhalten von ValidationRules nicht und kann nicht beantworten warum sie nicht greifen wenn der Wert beim Start zugewiesen wird.

Alternativ könntest du auf IDataErrorInfo umsatteln. Diese prüfen bei mir immer vono beginn an.

Lg, XXX

13.05.2011 - 14:21 Uhr

Dumme Frage,
aber warum lässt Du das Constraint nicht ganz weg? Wenn eh alles als item übergeben werden kann. Allerdings sehe ich in diesem Konstrukt gar keinen Sinn, in Sachen Typsicherheit.
LG, Marko

Stimmt, du willst einschränken aber doch alles zulassen. Ohne Constraint funktionierts wunderbar:


        static void Main(string[] args)
        {
            Foo(5);
            Foo((int?)5);
            Foo((int?)null);
            Foo("bar");
            Foo((string)null);
        }

        static void Foo<T>(T item)
        {
            if (ReferenceEquals(item, null))
                Console.WriteLine("Item is null");
            else Console.WriteLine(item);
        }

Oder willst du was anderes erreichen?

Lg, XXX

13.05.2011 - 11:05 Uhr

Dr. Google empfiehlt folgenden Thread: Reflection and Operator Overloads in C#

Alternativ könntest du einfach ein Testprojekt schreiben in dem du einen Operator deklarierst und dich per Reflection und GetMethods zum Ziel durchhangelst?

Lg, XXX

//Edit: was aber nichts daran ändert, dass wenn deine Klasse irgendwo generisch verwendet wird, der Operator nie greifen wird. Insofern ist es wohl sinnvoller das ganze mit der Operatorüberladung nochmals zu überdenken. Evt. ist deine Klasse besser als Struct implementiert bei dem automatisch beim Vergleich alle Member verglichen werden.

13.05.2011 - 10:18 Uhr

Das wird auch so nicht funktionieren. Wie du schon selbst irgendwo oben geschrieben hast, sind Operatoren statische Funktionen. Statische Funktionen unterliegen daher auch nicht den klassischen Vererbungsprinzipien sodass der Operator der in einer SubKlasse definiert wurde nicht aufgerufen wird, wenn er auf eine Basisklasse angewendet wird. Der Typ T in deinem Code ist abstrakter als der Typ der den Operator implementiert weswegen dieser nicht aufgerufen wird.


    class Program
    {
        static void Main(string[] args)
        {
            Sub a1 = new Sub();
            Sub b1 = new Sub();

            Console.WriteLine(a1 == b1); //prints "Operator in Sub called: ..."

            Test a2 = new Sub();
            Test b2 = new Sub();

            Console.WriteLine(a2 == b2); //prints "Operator in Test called: ..."

            object a3 = new Sub();
            object b3 = new Sub();

            Console.WriteLine(a3 == b3); //prints "..."
        }
    }

    public class Test
    {
        public static bool operator ==(Test test1, Test test2)
        {
            Console.Write("Operator in Test called: ");
            return Equals(test1, test2);
        }

        public static bool operator !=(Test test1, Test test2)
        {
            return !(test1 == test2);
        }
    }

    public class Sub : Test
    {
        public static bool operator ==(Sub test1, Sub test2)
        {
            Console.Write("Operator in Sub called: ");
            return Equals(test1, test2);
        }

        public static bool operator !=(Sub test1, Sub test2)
        {
            return !(test1 == test2);
        }
    }

Lg XXX

//Edit: Ich denke das es auch eine schlechte Angewohnheit ist mit == zu arbeiten(wie ich es selber auch permanent mache) eben, weil == oft irreführend sein kann.

12.05.2011 - 14:33 Uhr

Ich hätt mal folgendes versucht:

Scrollviewer hört auf MouseMove Events wenn zB linke Mouse Down und MousePosition > Rand dann Scroll um die Differenz und evt. setze MousePosition wieder zurück? sodass die Maus nie über den Rand raus bewegt werden kann.

Lg, XXX

11.05.2011 - 15:30 Uhr

Nettes Tool aber mMn. bei weitem nicht so angenehm wie On-the-fly Regex-Tester: Regex-Lab

11.05.2011 - 13:39 Uhr

Sorry, wusste nicht, dass es die Methode nur unter .NET 4.0 gibt.

Entweder du kannst upgraden oder du musst dich mit dem Workarround mit CoerceValue zufrieden geben:Local values in DependencyObjects

Lg, XXX

11.05.2011 - 13:03 Uhr

Hier mein Beispiel wos funktioniert:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication2
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MyViewModel();
        }
    }

    public class MySelectedValueTextBox : TextBox
    {
        public string SelectedValue { get { return (string)GetValue(SelectedValueProperty); } set { SetValue(SelectedValueProperty, value); } }

        public static readonly DependencyProperty SelectedValueProperty =
            DependencyProperty.Register("SelectedValue", typeof(string), typeof(MySelectedValueTextBox),
                                                       new PropertyMetadata(""));

        protected override void OnSelectionChanged(RoutedEventArgs e)
        {
            SetCurrentValue(SelectedValueProperty, SelectedText);
        }
    }

    public class MyViewModel : INotifyPropertyChanged
    {
        public List<Person> Items { get; set; }

        public MyViewModel()
        {
            Items = new List<Person> { new Person { Name = "Max Mustermann" }, new Person { Name = "Franz Huber" } };
            SelectedText = "bla";
        }

        private string _selectedText;
        public string SelectedText
        {
            get { return _selectedText; }
            set
            {
                _selectedText = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("SelectedText"));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public class Person
    {
        public string Name { get; set; }
    }
}


<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication2="clr-namespace:WpfApplication2" Title="MainWindow" Height="350" Width="525">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock Text="{Binding Path=SelectedText}"/>

    <ListBox Name="lb" Grid.Row="1" ItemsSource="{Binding Path=Items}">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <WpfApplication2:MySelectedValueTextBox Text="{Binding Name}"
              SelectedValue="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, Path=DataContext.SelectedText, Mode=TwoWay}"/>
            <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, Path=DataContext.SelectedText}"/>
          </StackPanel>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
  </Grid>
</Window>

Lg, XXX

11.05.2011 - 12:05 Uhr

Ich hab jetzt ewig gesucht und probiert um eine Lösung zu dem Problem zu finden:

Das Problem ist hier beschrieben: Dependency Property Value Precedence

Das Problem ist, dass wenn du im Codebehind deine DependencyProperty setzt, überschreibst du damit automatisch das Binding und es wird daher kein set mehr aufgerufen.

Statt dem direkten zuweisen musst du daher einen anderen Weg nehmen:


        private void TextBoxSelectionChanged(object sender, RoutedEventArgs e)
        {
            SetCurrentValue(SelectedTextProperty, _textBox.SelectedText);
        }

Diese Methode setzt den Wert der Property ohne bestehnde Bindings zu überschreiben.

Lg, XXX

11.05.2011 - 10:40 Uhr

Ich kenn mich gerade nicht mehr aus, was genau du erreichen willst.

Du willst das SelectedOutput von dem DependencyProperty SelectedValue gesetzt wird.
Wer oder was setzt SelectedValue?

11.05.2011 - 10:30 Uhr

Aber im Getter schon? Ist das eine selbst definierte DependencyProperty? Dann musst du eventuell noch explizit Mode=TwoWay setzen.

Lg XXX

11.05.2011 - 10:09 Uhr

Also beide Varianten müssen funktionieren. RelativeSource sowie die mit ElementName. Es reicht eigentlich schon direkt an den DataContext der ListView zu binden.


"{Binding ElementName=lvOutput, Path=DataContext.SelectedOutput}"

oder


"{Binding RelativeSource={RelativeSource AncestoryType={x:Type ListView}}, Path=DataContext.SelectedOutput}"

wenn dem nicht so ist, dann ist hat der entsprechende DataContext diese Eigenschaft nicht oder der Pfad dort hin ist schlichtweg falsch.

Bindingfehler werden im Debugoutput ausgegeben. Ansonsten ist es mMn. auch ratsam immer vollqualifizierte Bindingpaths anzugeben, weil diese dann eine Exception zur Laufzeit werfen wenn sie nicht gefunden werden.

Beispiel:

(ViewModels:ISowiesoViewModel.SelectedItem)

Lg XXX

11.05.2011 - 09:34 Uhr

Naja und jetzt? Poste doch bisschen mehr Code... Am besten die komplette Hierarchie bis zum Fenster rauf und wo welcher DataContext verwendet werden soll.

Lg XXX

11.05.2011 - 09:11 Uhr

Hallo Sebastian1989101,

du musst mittels RelativeSource dir das MainWindow suchen und kannst dann auf den DataContext dessen mit Path=DataContext.... zugreifen.

Lg, XXX

29.04.2011 - 16:48 Uhr

Alternative würde mir nur ein MultiBinding einfallen, welches das Objekt und den wert des PropertyPath's bekommt und diesen dann auswertet.

Siehe dazu auch Evaluating PropertyPath on an object

Lg XXX

29.04.2011 - 14:58 Uhr

Lass das Eventschmeißen und Textzuweisen bei WPF sein. Schau dir MVVM an und verwende Databinding um Daten zwischen den Controls auszutauschen.

Lg XXX

29.04.2011 - 14:54 Uhr

Indem du dir merkst, was du vorher gesendet hast. Und beim nächsten mal prüfst ob der Wert sich geändert hat.

Lg XXX

29.04.2011 - 14:50 Uhr

Wo bekommst du die Daten her? Wenn aus einer DB, wärs sinnvoller dort mittels den geeigneten Selects(Group by) die Daten schon im Vorfeld zu filtern.

Lg XXX

27.04.2011 - 13:53 Uhr

Laut diversen Artikeln die ich jetzt überflogen bin musst du nur das QueryEndSession Event abhorchen und bei einem Abbruch "false" zurück geben was du in deinem Codeausschnitt nicht machst.

Bei QueryEndSession wird, zumindest laut Doku, noch nichts geschlossen. Erst bei EndSession.

Ich nehm alles zurück. 😃

When an application returns TRUE for this message, it receives the WM_ENDSESSION message, regardless of how the other applications respond to the WM_QUERYENDSESSION message

Man müsste sich irgendwie an erste Stelle der Windows Nachrichtenschleife reinhängen. Hätt aber keine Ahnung wie.

Siehe Doku: WM_QUERYENDSESSION Message.

Lg XXX