Peinlich ... sorry!
Habe Copy & Paste gemacht und beim Ändern des Methodennamens wohl ein wenig zu viel gelöscht ...
Jetzt geht es - danke Euch!
bs.DataSource = AlleLieferartikelLieferant(lieferant.ID);
exdream# schrieb:
Bei der Eingabe von 190 soll folgende Ausgabe erstellt werde:
50 Geldschein: 3
20 Geldschein : 2
10 Geldschein: 1
5 Geldschein: 0
DEN Geldautomaten würd ich dann auch gerne mal nutzen
Ich glaube da hat sich ein kleiner Fehler eingeschlichen...
Ich habs bei mir immer so das ich dem "WindowService" (Resolved aus nem ServiceLocator (auch ServiceProvider genannt) View-ViewModel Paare bekannt mache.
dadurch habe ich am Ende die Möglichkeit zu sagen:
public class FooViewModel : ObservableObject
{
private void ShowBar()
{
var windowService = ServiceLocator.Resolve<IWindowService>();
var barViewModel = new BarViewModel();
windowService.ShowDialog(this, barViewModel);
}
}
"this", also das ViewModel ist dann der Owner und barViewModel dann das neue Fenster.
Der WindowService erstellt alle fenster und kennt alle offenen, bei dem Owner holt er sich die View anhand des ViewModels aus den offenen Fenstern, das neue ViewModel ist dann der DataContext des neuen Fensters das er erstellt sobald er den View Typen anhand des ViewModels ermittelt hat.
Siehe dazu auch:
http://www.my-libraries.de/index.php/component/content/article/11-libraries/dwservices/68-iwindowservice
Der Vorteil ist das man es dadurch auch sehr leicht testen kann, einfach ein IWindowService Mock unterschieben schon kannst du das Ergebnis aus den Tests beeinflussen.
Falls es mehrere Views zu ein ViewModel geben kann, dann registrier ich die Views mit nem Namen, dann sagt man beim ShowDialog auch noch welche View man gerne hätte.
Das ViewModel sollte keine View Objekte erstellen oder gar anzeigen, dadurch ist es nicht mehr Testbar. Ich gehe sogar soweit das ich sage das das "ViewModel Projekt" nichtmal das "View Projekt" kennen darf. also ein service.ShowDialog<BarView>(barViewModel) ist dadurch nicht möglich (erlaubt).
µ schrieb:
List<string> names = getNames();
oder
var namesList = getNames();
Ich muss zugeben, die Bezeichnung fooList/fooSequence findet man bei mir oft, weil wenn ich es nur z.B. "names" nenne und hinterher mit foreach drübergehe, dann muss ich ja foreach (var name in names) schreiben und es nervt mich, dass sich die Liste und der einzelne String vom Namen her nur an dem 's' unterscheiden. Da kann ich IntelliSense auch nicht mehr so effektiv nutzen
Alles schon etwas länger her, also keine 100%-igen Aussagen:
Es gibt Wege aber keiner davon ist wirklich schön und sauber.
Deshalb vielleicht besser mit BeginAcceptTcpClient arbeiten, das tut nicht ganz so weh. Asynchrones-IO hat sowieso einige Vorteile.
Jedenfalls kann "TcpListener serverSocket" dann jederzeit geschlossen werden (Close()).
Wenn ich mich richtig erinnere Verursacht das einen letzten Aufruf des Callbacks von BeginAcceptTcpClient. Also im Callback darauf achten in welchem Zustand sich der Socket befindet.
Hallo,
Chiller schrieb:
Kannst du eingrenzen, wie lange der schreibende Prozess braucht um das nächste byte reinzuschreiben?
Nein. Woher soll ich wissen wie schnell oder langsam das Netzwerk ist?
Die Lösung, die Hellsgore oben angegeben hat, funktioniert. Daher sehe ich im Moment keinen Grund daran noch irgendwas zu ändern.
Gruß
Michael
Für einen Quadtree ist es auch ganz schön, wenn er sich selbst unterteilen kann.
Ich vermute mal Du hast eine List von Geometriedaten pro Knoten. Falls die Liste zu viele Daten enthält, wird eine Methode "Subdivide" aufgerufen. Diese erstellt die 4 Kindknoten, verteilt die Geometrie auf die jeweiligen Kinder und führt das rekursiv weiter bis zu einer bestimmten Maximaltiefe.
Hi,
danke für deine Antwort.
Die Sourcen für die Dll habe ich leider nicht in der Hand , von daher wäre es der C++/CLI Wrapper...hatte aber eigentlich gehofft einen Wrapper umgehen zu können!
Gruß
Sascha
Hi,
ich habe eine SQL Abfrage über SqlDataReader den Reader lade ich in eine DataTable und die DataTable über
dg.ItemsSource = dt.DefaultView
in ein DataGrid(dg).
Mir geht es explizit um die Option vom Markieren irgendeiner Zelle, also den Inhalt der Zelle.
Bei einer SQL-Abfrage die folgendermaßen beginnt:
"SELECT t.wert, ...usw..."
funktioniert das auch.
Aber wenn ich den Inhalt der zb. ersten Spalte durch eine CASE Abfrage bestimme, wie folgt:
"SELECT (CASE WHEN f.wert IS NULL THEN p.wert ELSE f.wert2 END) AS Spaltenname, ...usw..."
funktioniert das leider nicht mehr. Ich kann keinen Zelleninhalt mehr in die Zwischenablage kopieren, komme nicht mal in die Zelle mehr rein...
Ich habe in der doku von DataGrid schon eine Eigenschaft gesucht, aber noch nichts passendes gefunden.
Hat vielleicht einer eine Idee? Wäre super!
Gruß Gustl
Edit: die Eigenschaft IsReadOnly bewirkt hier nicht, auch wenn ich diese nach der Zuweisung zur Laufzeit setze.