Ja das geht.
Aber den Weg über die WinAPI finde ich am schönsten.
Ich hab netzwerkcode der Pakcets empfängt. Man regestriert ein Delegate vom Type:
void delegate(Packet p, NetState ns);
Wenn man sich so ein Event registriert, muss man wissen für welches Packet man sich registriert hat und kann es dann einfach so machen:
void MyPacketCallback(Packet p, NetState ns) {
MyPacket packet = (MyPacket)p;
//Schon hat man zugriff auf das richtige Packet.
}
Du wirst es soweit ich weiß nicht hinbekommen, dass dein Delegate jedesmal anders aussieht und man sich das Casten sparen kann. Das Casten ist in diesem Fall aber so sicher, dass es garantiert immer funktioniert und nicht mal eine Sicherheitsabfrage braucht.
timer.Dispose();
m_Data.Dispose();
willst du doch eher aufrufen wenn e.Cancel = false ist oder? So wird ja alles gestoppt wenn der Benutzter das Programm weiter verwendet.
bittebitte nicht!
Ich als user fühl mich voll veräppelt, wennich eine anwendung schließe, dassichdann gefragt werde: "möchten Sie die Anwendung schließen?"
Da kann man mich ebenso fragen, ob ich noch im Vollbesitz meiner geistigen Kräfte bin.){gray}
Nur weil ich heute gerade sonne Anwendung hatte die mich verarscht hat. Ich hab auf nein geklickt weil ich nicht speichern wollte. Der hatte aber gefragt ob ich verlassen will... Damit rechnet man als erfahrender Anwender doch nicht 😉
Um noch etwas zur Antwort bei zu tragen...
An dem geposteten Code liegt es nicht, du kannst frmMain_FormClosing ja mal leer machen. Dürfte immer noch hängen.
Irgendwo in deiner Anwendung läuft definitiv noch ein Thread im Hintergrund. Time sind da ein guter ansatz, ruf beim Beenden Dispose() von allem auf was es besitzt, bzw gerade dann wenn es threads benutzt.
Über die Reflection solltest du den Typ raus bekommen. Aber etwas Beispielcode würde das ganze noch etwas veranschaulichen.
(Derzeit) nicht knackbar ist eine Lizenzdatei auf Basis asymmetrischer Verschlüsselung. Du als Herausgeber des Programms verschlüsselst mit dem privaten Key (sign) die Lizenzdatei. Dein Programm hat als Ressource den dazupassenden öffentlichen Schlüssel und kann die Lizenzdatei entsprechend lesen.
Das stimmt nicht ganz, die Verschlüsselung ist nicht knackbar. Dein Programm jedoch nicht vor änderungen geschützt. So beinhaltet das Programm den PublicKey. Wenn der durch einen Hacker ausgetauscht wird, oder die Verifizierungsmethode übergangen wird, ist auch der Schutz wirkungslos.
Aber es wird an vielen Stellen klar, dass ein 100%iger Schutz nicht möglich ist.
Was ich vermisse ist eine Freie Lösung für die Lizensierung von C# Software. Wenn es nach mir geht sollten die Keys dabei automatisch auf einem Webserver erstellt werden können.
Ich will nicht das sicherste der Welt, auch um das Obfuscaten muss man sich dann noch kümmern, aber eine freie Lösung für (sicherheitstechnisch einfache) Lizensierung wäre schon praktisch.
Wäre der nächste Versuch gewesen, aber habs 1 Min vorm nach Hause gehen geschafft 😃
Beim X10Receiver.Net ist die Interop.X10.dll und dort gibt es eine Klasse die alles regelt.
Die kann ich nun entweder nutzen (Wenn die Lizenz passt) oder mit dem Reflector angucken und schauen wie es funktioniert. Das sollte reichen.
HI,
ich hab einige Zeit recherchiert aber nichts funktionierendes zu stande gebracht, ich habe eine Fernbedienung von Medion. Von dieser will ich die Testendrück in meinem Programm abfangen.
Die Fernbedienung ist als USB Gerät über X10 verbunden.
Als HID Device war sie dem entsprechend nicht zu finden, was mir Fehlt ist ein Ansatz, wie ich auf den Datenstream der Fernbedienung / Des Treibers zugreifen kann.
Mit X10Receiver.Net ( http://www.x10receiver.net/project ) klappt es. Vielleicht weiß jemand wie es geht oder wie es bei X10Receiver.Net funktioniert.
Gruß, Tarion
Und man sollte sich wirklich überlegen was man auf lange Sicht will. Du hast noch alle Möglichkeiten offen. Sicher werden dir viele erzählen das sie nur mit einer Ausbildung gut als Programmierer durchkommen. Und ich würde beraubten jeder in der Softwareentwicklung sollte auch selber viel programmiert haben.
Dennoch wird es auf lange Sicht vielleicht langweilig nur an kleinen Projekten zu programmieren oder man will in einer großen Firma arbeiten wo man Aufstiegschancen bis zu Projektmanager ebene hat. Spätestens hier ist dann ein Studium Voraussetzung.
Ich selbst bin 24 und studiere in die Richtung, nebenbei arbeite ich aber und entwickle Software für eine kleine Firma. Das bringt viel Erfahrung, würde mich aber auf lange Sicht (30-40 Jahre) nicht reizen, irgendwann will ich an Softwareprojekte auch aus anderen Blickwinkeln arbeiten.
Wenn du links aus der Liste einen Smilie wählst, ändert sich die Option automatisch. Das finde ich durchaus eine sinnvolle und gute Lösung.
Ich weiß es gibt dieses Thema schon des öffteren, ich habe mittlerweile auch viele Lösungen gefunden wie man u.a. per WIA auf eine Webcam vom PC, in meinem Fall eine Laptop camera zugreift.
Leider habe ich bisher nichts, was wirklich überall läuft. Ich habe hier mehrere Laptops und per WIA klappt es bei den EeePCs z.B. super, aber bei den meisten anderen Rechnern bleibt das Bild schwarz. Dann habe ich es über AVICap propiert. Dort sind die Snapshots aber auf manchen Rechnern verzerrt und unkenntlich.
Desshalb möchte ich hier noch einmal fragen ob jemand eine Lösung hat die möglichst überall lauffähig ist.
Ich habe das zu überwachende Programm als Client gesehen, den der Webservice ja dann kennen muss.
Wenn es nur ein Programm auf immer dem gleichen PC mit der gleichen IP ist, ist mein Einwand wirklich hinfällig. Aber es klingt so, als ob dieses Programm irgendwo laufen könnte, oder es mehrere Programm sein können.
Aber ich habe nach wiederholtem lesen des letzten Satzes im Startpost wirklich etwas nicht ganz richtig gesehen. Das der Webservice die Anfragen der User abfängt und den Status der Anwendung Cached hat auch noch Sicherheitstechnisch vorteile, da kein Client an die Software kommt.
Dann solltest du auch die Änderungsnachricht nicht vom Grid bekommen, sondern von deinen Daten.
Hast du Performance probleme, oder hast du angst vor Performance Problemen.
Der Client muss in beiden Fällen alle 5 Sek eine Anfrage bearbeiten, da es nur eine Statusanfrage ist wird es wahrscheinlich zu keinen Geschwindigkeitsproblemen kommen.
Wo ist der Vorteil das der Server den Client abfragt und nicht der Client am Server pollt?
Ein Vorteil ist, dass bei vielen Clients der Server das Pollen pro Client seltener durchüphren kann und damit für sich eine Art load balancing machen kann. Die Clients haben dann aber wenig Einfluß. Zudem könnte man das load balancing auch im umgekehrten Fall durchführen. (Server schickt in der Antwort das er seltener was hören will).
Alles in allem wirst du bei Webservices um Pollen nicht drum rum kommen. Wer das macht sollte aber egal sein bezüglich der Performance.
In deiner Lösung muss der Service alle Clients kennen. Meistens kennen die Clients eher den Server und stellen die erste Verbindung her.
Wenn du keine Animation hast würde ich einfach für jede Karte eine Image komponente anlegen und die Karten aus den Resourcen ziehen, dann aknnst du sie einmal mit Photoshop oder Gimp ordentlich zeichnen und dann jederzeit an gewünschte Stellen laden. Das geht auch schnell. Dann ggf nen Timer damit das Geben echter wirkt und noch nen kleinen sound dazu.
Edit:
Oder einmal malen und dann als Image in nem Dictionary o.ä. halten und daraus laden. Aber Karten immer neu zu zeichnen halte ich für unnötigen overhead.
Hi,
ich hab gerade mal wieder einen Verweis auf 1.1.1 der Wie Poste ich Richtig gelesen.
Es ist klar das hier ein gewisses Nivau gehalten werden soll, dennoch sind Grundlagenfragen meist auch schnell beantwortet und stören im Normalfall bei Missachtung von Regel 1.1.1 nur die anderen Foren. Ein Extra Forum hierfür würde die anderen Foren etwas entlasten und gleichzeitig auch Neulingen eine gute Hilfe bieten den Einstieg in C# und vll auch in die anderen Foren zu finden.
Darauf bin ich auch mal gestoßen. Es gibt nen DialogResult welches für Dialoge genutzt werden sollte, da hast du auch besser Einfluß drauf. Ansonsten ist die eigene Membervariable wohl unumgänglich.
Für große Zeichensachen solltest du dir was anderes suchen als GDI.
Ansonsten kannst du natürlichen alles in einem Thread vorzeichnen und das fertige Bild dann per Invoke irgendwie sync übergeben.
Geschwindigkeit kannst du mit Diagnostic.Stopwatch einfach messen um die wirklichen Schwachstellen zu finden.
Such mal im Forum und im Internet, da gibt es viel zu.
Du kannst auch mal die ganze Liste der Cell und Row events durchgehen. Validated / Validate ist noch ein guter Kandidate.
Ein Problem mit Mono ist es, das es wohl noch Speicherlecks haben kann. Diese aussage habe ich aber vor ~6 Monaten gehört.
Demnach kann es, je nach Programm und gerade auf einem Server auf lange Sicht zu Speicherprobleme führen.
Aber informiere dich da auch nochmal selbst.
Um die Geschwindigkeit würde ich mir erst mal keine Sorgen machen. Zur not nimm die eine Virtuelle Maschiene mit Win und Linux und mach Performance Tests.
Verdammich, manchmal sieht man den Wald vor lauter Bäumen nicht. Jetzt hab ich dir Funktion ContainsFocus nur überschrieben an den Kopf fass
Danke 😃
Wenn ich das so lesen, ist deine Vorgehensweise nicht sehr wissenschaftlich.
Du sprichst von Kopieren? In der Forschung werden mehrere tausend Euro für 5-10 Seitige Scripts zu bestimmten Themen ausgegeben um daraus einige wenige Informationen zu ziehen die einem mit eigenem tief gehenden Fachwissen helfen können solche vorhaben wie deins zu realisieren.
Sehr viele Leute haben seit vielen Jahren an Algorythmen zum Komprimieren geforscht und erfolge wie gzip gezeigt. Diese Erfolge waren so gut, das sie heute noch viel zum Einsatz kommen.
Du willst von 1000Kb auf 3Kb Reduzieren. Wenn die 1000kb jetzt ne bestimmte Struktur haben, kannst du es schaffen. Aber offensichtlich hast du als EIngang einen Zufallsprozess, da ist das nicht möglich.
Du "Probierst rum", dabei gibt es ein paar ganz einfache Regeln die dir schon viel helfen würden, wie z.B. um an X Variablen zu kommen, brauchst du X Gleichungen, sonst ist das System nicht eindeutig bestimmt. Du hängst irgendwie an deinen Signalen, aber abstrahiere das Problem doch erst mal und gehe dann Mathematisch an das Problem ran.
Du hast es mit stochastischen Prozessen zu tun, wenn du 2 stochastische Prozesse p1 und p2 überlagerst (Gewöhnliche Rechenoperationen) und nicht p1+p2 Werte dabei heraus bekommst, wirst du nie wieder ohne Verlust an die Einzelprozesse kommen.
Du musst die Daten umkosdieren -> Huffman z.B. das ist aber schon keine Überlagerung mehr sondern ein bewährtes Verfahren, welches du gerne mal implementieren solltest. Dabei lernt man viel auch wenn du es aus stolz hinterher nicht verwendest.
Bei irgendwelchen Reihen oder Korrelierten Daten sieht das schon wieder anders aus, aber du hast ja nun mal Zufallswerte.
Naja - wenn es nicht gerade um WinForms geht, werte ich aber nur in seltenen Ausnahmen sender tatsächlich aus
Selten = Wird auf lange Sicht zu 100% eintreten.
Das ist wie zu sagen: "Mein Programm crasht nur in 0,001% der Fälle, das ist mir deshalb egal."
Ich führe diesen Code aus:
Buffer.BlockCopy(m_Buffer, m_Head, newBuffer, 0, m_Size);
Die Werte vom Debugger:
m_Buffer.Length = 6144; // srcArray
m_Head = 0; // srcOffset
newBuffer.Length = 8192; // destArray
0; // destOffset
m_Size = 6616; // count
Beide Arrays sind vom Typ byte[]
Die Exception die fällt:
Error: Exception: System.ArgumentException: Offset und Länge für das Array liegen außerhalb des gültigen Bereichs, oder die Anzahl ist größer als die Anzahl der Elemente vom Index bis zum Ende der Quellauflistung.
bei System.Buffer.BlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count)
Jemand eine Idee?
Oder bin ich nur Blind.
public static List<string> GetProjects()
{
Project p = new Project(title, splittedCompany[1], start, end, no, order_no, manager, splittedStatus[1], offer_no, purchaseOrderNo, type, saturday, sunday, holiday, day, budgetDays, budget, intern);
}
Vorschlag:
public static List<string> GetProjects()
{
if (splittedCompany.Lenght < 2) {
throw new Exception("splittedCompany.Length zu klein");
}
if (splittedStatus.Lenght < 2) {
throw new Exception("splittedStatus.Length zu klein");
}
Project p = new Project(title, splittedCompany[1], start, end, no, order_no, manager, splittedStatus[1], offer_no, purchaseOrderNo, type, saturday, sunday, holiday, day, budgetDays, budget, intern);
}
Denk dran, dass arrays immer mit 0 Indiziert werden, also splittedCompany[1] muss mindestens die Länge 2 /* Edit, ja meinte ich 😉 */ haben!
Solche Ifabfragen, am besten mit sinnvoller Fehlerbehandlung statt Exception sollte man bei jedem Zugriff auf ein Indexer machen.
Edit: Wenn das nicht reicht, schau dir den Konstruktor von Project an, ob dort auf Collections zugegriffen wird.
Das klingt sehr abstrakt, und sehr kompliziert wenn dir eine FFT nichts sagt.
Da würde ich schon eher auf vorhandene Algorithmen zurück greifen. Es gibt viele Effiziente Komprimierungen für viele Anwendungsgebiete.
Dann ist die Frage ob die Komprimierung verlustfrei sein muss. Audio und Bild Komprimierung ist z.B. meist mit Verlusten verbunden, sobald es verlustfrei wird, sinkt auch die Effizienz stark und dürfte irgendwie durch die Entropie begrenzt sein.
Siehe auch: http://de.wikipedia.org/wiki/Entropiekodierung
Meine beiden ListViews haben kein ItemChanged Event oder Ähnliches, wie würdet ihr dann da überprüfen, dass sich etwas geändert hat?
Da solltest du die View vom Model unterscheiden.
D.h. du musst nicht feststellen, dass sich die ListView ändert, sondern das sich die Daten die im ListView angezeigt werden ändern. Das bekommt das ListView selbst ja auch mit oder änder die Daten, dann merken die es. Dort kannst du dann auch auf die Änderung reagieren und sie abspeichern.
Wenn der User etwas abschickt kannst du alle gespeicherten Änderungen durchgehen und wenn die Änderung vom Originalwert abweicht protokollieren.
Also:
Versuch mit der GUI nur die Daten zu ändern und dort die Änderungen zu tracken und nicht in der Form die Userevents zu analysieren.
Okay, bei Performanceproblemen kann man noch über die Dll Methode nachdenken. Aber so läuft es schnell genug optimieren kann man immer noch 😉
Ich habe meine Menüführung die über den Focus läuft. Also man kann per Tastatur / anderem Eingabegerät verschiedene Usercontrols focusieren und dann dort Kontextmenus anzeigen. Vielleicht ist dann die Möglichkeit mit den Events dann auch nicht so schlecht.
Danke.
Hi,
ich suche ne gute Möglichkeit herraus zu finden ob ein Control oder eines seiner Subelemente den Focus hat. Gibt es da etwas fertiges?
Sonst fällt mir nur sowas ein:
private bool ContainsFocus
{
get
{
if (this.Focused) return true;
foreach (Control c in this.Controls)
{
if (c.Focused)
{
return true;
}
}
return false;
}
}
Müsste noch für beliebige Tiefen ausgebaut werden.
Ging schnell, also so:
private bool ContainsFocus
{
get
{
if (this.Focused) return true;
return containsFocus(this);
}
}
private bool containsFocus(Control control)
{
foreach (Control c in control.Controls)
{
if (containsFocus(c))
{
return true;
}
}
return false;
}
Hat das .net wirklich nicht drinnen oO
Hi,
ich habe nen ContextMenu und dort ein Hintergrundbild eingefügt. Dieses Bild verschwindet wenn man mit der Maus drüber fährt.
Kann man die Image Property so nutzen, dass das Bild über den ganzen Eintrag geht, oder verhindern, dass der Hintergrund beim Mouseover verschwindet?
EIne offene ConexteMenu Komponente die das kann würde mir zur Not auch helfen.
Danke, Tarion
Klingt super, würde ich gerne nutzten.
Hab nur etwas Angst vor auftretenden Fehlern, gerade beim Updater ist man dann doch sehr aufgeschmissen. Ist es möglich den Quellcode zu erhalten? Wie ist der Lizenziert?
Gruß, Tarion
Ansonsten schau dir an wie du im Debugger Breakpoints setzt und den Quellcode schritt für Schritt ausführen lässt, dann hilft es manchmal noch dinge in Variablen zu schrieben bevor man sie verwendet. Dann sieht man im Debugger schnell das die Variable nach Zuweisung noch null ist, oder auch vorher das die Property null zurück gibt.
Die Ressourcen werden beim Compilieren ohnehin eincompiliert. Daher ist es schon sinnvoll sich an die Compiler Standards zu hallten.
Die Ressource Datei hat auch Quellcode da kannst du mal gucken ob der Pfad angegeben ist. Aber sicher bin ich mir nicht ob das hilft.
Was sind denn die Gründe dafür die Ressourcen anders zu verwalten?
Die DLL ist wie der Name schon sagt eine "Dynamic Link Library" kann also von überall Dynamisch gelinkt werden und sollte keine Kenntnisse darüber haben von wem sie gelinkt wird.
Daher kann sie sehr wohl events werfen wie du ja auch schon machst. Jedoch widerspricht es dem Sinn einer dll events zu abonnieren. Es ist eine "library" die genutzt werden will.
Also Kommunikation Exe -> dll = Funktionsaufrufe
Und dll -> Exe = events
Was spricht gegen dieses Vorgehen. Eventuell solltest du Code aus der dll in die exe schieben um dem Sinn einer dll gerecht zu werden.
Man kann auch über die Reflection dynamisch Objekte erzeugen.
Type t = Type.GetType("myType");
object i = Activator.CreateInstance(t /*, arg1, arg2, ...*/);
Das einfachste wäre wohl eine Toolbar mit ToolStripButtons und dann die Seitenaufrufe selber basteln. Dann haste jede Seite in einem UserControl welche du in ein zentrales Panel legst.
Hab ich auch mal für Horizontale Tabs genommen und sieht ganz gut aus, man kann es dynamisch hoch machen, Text / Bilder rein werfen und es somit auch recht gut customizen.
Gänzlich würde ich nicht auf Events verzichten. Dass man sie nicht unbedingt braucht, kommt auf den Anwendungsfall an.
Ein Anwendungsfall wo ich Events Beispielsweise als wichtigen Bestandteil ansehe, ist eine Client-Server-Anwendung. Irgendwie sollte dein Programm schon gesagt bekommen, "Hey du, ich Serverklasse, da hat sich grad wer verbunden.".
Klar geht es auch anders, aber dann eben mit mehr Arbeit verbunden. - Wo sie nicht gebraucht sind, dort hast du recht, dort können sie getrost aus der Materie rausgehalten werden.
Naja wenn man sich die c# implementierung des TCPListeners anschaut, nutzt dieser gerade nicht die events aus c#...
Man übergibt beim BeginListen(...) einen delegate, welcher aufgerufen wird wenn sich jemand verbindet. Man aboniert kein event im Sinne der .net Bibliothek.
Viel weniger kommt man bei WinForms um Events herum. Button1.Click ist da das beste Beispiel.
Es gibt also selbst innerhalb von .net verschiedene Implementationen und beim TCPListener will man nur einen Listener haben dessahlb eignen sich die events nicht, weil diese auf multicast delegates basieren. Also beliebig viele Abonenten.
Du hast die Begriffe noch nicht richtig verstanden.
Man kann mir einem privaten key nichts verschlüssen, weil es keine sichere Verschlüsselungist wenn man es mit dem öffentlichen Schlüssel entschlüsseln kann. Den hat per Definition jeder. Wenn den öffentlichen Schlüssel nicht jeder bekommen kann, kannst du auch an Synchrones Verfahren nutzen.
Wenn du nun also mit dem Private key "Verschlüsselst" kann es jeder entschlüsseln, aber weiß das du es verschlüsselt hast (Signatur). Da das für die ganze Nachricht relativ aufwändig ist, macht man es nur mit einem Hashwert der Nachricht. So signiert man und so wendet man einen Privaten Key zur "Verschlüsselung an".
Vielleicht kannst du uns dein Szenario nochmal näher erklären, bevor du dir selber irgendwelche Sicherheitslücken baust oder dir selber Dinge umdefinierst die dann keiner mehr versteht.
schau dir mal den Background worker an.
Mit GUI kannst du das ISynchronizeInvoke interface der GUI benutzten, also einfach myGui.BeginInvoke().
Ansonsten sind für Synchronisation zwischen Threads noch ManualResetEvent's ganz hilfreich.
Du kannst Daten als Blob in der Datenbank speichern. Oder du nutzt das Windows Netzwerk, mit dem ich mich nicht besonders auskenne.
Mit dem Blob machst du eine Tabelle auf dem DB Server die z.B. Id (Int), FileName (Int), Data (Blob) als spalten hat. Dann kannst du die DB auch nach dem Dateinamen durchsuchen. Wie du die dir Sturktur aufbaust ist dann aber relativ frei.
Ich weiß nur nicht ob das so gut für wirklich große Datenmengen geeignet ist und du wirst nicht auf den Daten suchen können außer du hast extra spalten welche die Daten beschreiben wie eben der Dateiname.
nutze das [ CSHARP ] Tag 😉
Und ich glaube du musst die Exception fangen. Das sie geworfen wird kannst du ja nicht verhindern.
Du musst sie ja eh einzeln accepten und dann kannst du gleich einen async read drauf machen. Dann musst du die eventuell gar nicht speichern. Ansonsten musst du es selbst machen.
Wie am besten?
List<TcpClient> clients;
Gruß, Tarion
Dann kann dein Interface doch Get anbieten und die implementierende Klasse private set hinzufügen.
Die Exception kann ich noch fangen. Dann hilft einfach Visible=false und ggf noch nen Dispose() um das ding weg zu machen.
Wenn ich Debugge und über den Debugger kille bleibt das Icon aber wie beim schlißen durch den Task Manager, desshalb wäre es schon super der WinAPI beim Neustarten des Programms das Aufräumen nahe zu legen. Dann hätte man wenigstens nicht 10 Icons nach 10 Starts.
Hi,
wenn meine Anwendung unsachgemäß beendet wird, bleibt immer noch das Tray Icon.
Wie kann ich der WindowsAPI Sagen, sie soll alle inaktiven TrayIcons aufräumen? Damit ich entweder beim auftreten des Fehler noch das Icon entfernen kann, oder beim nächsten Start der Anwendung das letzte zurück gebliebene.
Hi,
in WPF hat jetzt ja die GUI einen Dispatcher. Aber wie gelange ich aus dem ViewModel an diesen. Mein ViewModel kennt die View ja gar nicht.
Gruß, Tarion
Wie bekomme ich die Events von der View ins ViewModel?
Ich weiß bisher nur wie ich die Events in den CodeBehind bekomme, von dort aus auch über den DataContext ins ViewModel. Aber gehts auch ohne CodeBehind?
Es gibt ja diese wundervollen KeyBindings. Die werden aber in der View gesetzt.
Sieht dann so aus:
<Window.InputBindings>
<KeyBinding Key="X" Modifiers="Control" Command="{StaticResource ExitCommandReference}" />
</Window.InputBindings>
Gehört das wirklich in die View? Oder gibt es ne feine Möglichkeit die Tastenbelegung im Model / ViewModel vor zu nehmen?
Du wirst immer alle Strings haben müssen zum übersetzten. Oder du machst es über ID's was aber noch unübersichtlicher wird.
Oft können dann Tools helfen, die alle Stings die übersetzt werden müssen in ein Ressourcefile parsen. Dann muss man dort nurnoch übersetzten.
Wenn ich in meinem View Resourcen definiere wie welches ViewModel gerendert wird. Kann ich das auch so machen:
ChinesischPersonViewModel von ChinesischView
SimplePersonViewModel von SimplePersonView
Alle deine Logik ist in SimplePersonViewModel und ChinesischPersonViewModel erbt von PersonViewModel.
Sicher habe ich denn mehr Aufwand, weil 1 VM Mehr, aber ich muss den Code nicht 2 mal schreiben, hab aber sogar noch die Möglichkeit das ChinesischPersonViewModel einzeln zu erweitern.
Hat das irgend einen Nachteil für dich, CSL?