Zuerst einmal vielen Dank für eure Hilfe und das Interesse.
@Sebastian.Lange:
Du hast dich nicht verlesen... Aber ich habe es korrigiert 😉 Jedoch weiß ich nicht, ob es nötig ist, da im Mini Chat Beispiel auch kein IPC verwendet wurde.
Client:
var protocolSetup = new Zyan.Communication.Protocols.Ipc.IpcBinaryClientProtocolSetup(Versioning.Lax);
_zyanConnection = new ZyanConnection(protocolSetup.FormatUrl("IPCZeit", "Zeit"), protocolSetup);
Server:
var protocolSetup = new Zyan.Communication.Protocols.Ipc.IpcBinaryServerProtocolSetup("IPCZeit", Versioning.Lax);
_zyanComponentHost = new ZyanComponentHost(name, protocolSetup);
Aber auch die Änderung brachte keine Lösung 🤔
@Abt:
Ich habe es jetzt mal wie folgt umgestellt:
Server:
public class Zeit : Interface.IZeit
{
private int _sekundeAlt;
#region Implementation of IZeit
public event Action<int> ZeitEvent;
public void GetZeit()
{
_sekundeAlt = System.DateTime.Now.Second;
while (true)
{
int sekundeNeu = System.DateTime.Now.Second;
if (_sekundeAlt != sekundeNeu)
{
var zeitEvent = ZeitEvent;
if (zeitEvent != null)
{
try
{
zeitEvent(sekundeNeu);
_sekundeAlt = sekundeNeu;
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
}
}
}
#endregion
}
Client:
class Program
{
static void Main(string[] args)
{
var zyanConnection = new Connection();
zyanConnection.OpenClient("Zeit", "192.168.2.148");
var zeit = zyanConnection.CreateProxy<IZeit>();
while(true)
{
if (Console.ReadLine().ToString() == "Start")
{
zeit.ZeitEvent += (sec) => Console.WriteLine("Client: " + sec);
}
}
}
}
Das Problem bleibt leider.
Gruß
..Heinz..
@weismat:
Danke für deine Antwort.
Zyan unterstützt zwar IPC, jedoch heißt es in der Doku: Doku für verteilte Ereignisse
Ereignisse funktionieren mit jedem ProtocolSetup. Und im Beispiel (Mini Chat) wird auch kein IPC verwendet.
@inflames2k:
Natürlich habe ich schon auf der Projektseite gesucht und mir auch das Mini Chat Beispiel herunter geladen und den Code durchsucht. Nur leider scheint es an einer Stelle zu haken.
Danke für deinen Link zum Broadcast Beispiel.
Wenn ihr noch weitere Ideen habt, dann nur her damit. Solange suche ich weiter 😃
Gruß
..Heinz..
Hallo,
ich habe weiter versucht, den Fehler zu finden, aber leider funktioniert es immer noch nicht.
Ich starte den Server, dann den Client; aber "ZeitEvent" im Server ist immer "null".
Habe ich etwas übersehen?
Ich benutze die Version 2.5.0.
Gruß
..Heinz..
Hallo,
ich habe ein kleines Problem mit Zyan.
Und zwar führe ich auf dem Server eine Berechnung durch und möchte, wenn diese fertig ist, auf dem Client die Anzeige ändern.
Dazu habe ich mir ein Event erstellt, welches im Server aufgerufen wird, wenn die Berechnung fertig ist und im Client "ausgeführt" wird.
Dan funktioniert leider nicht. Wenn ich am Server das Event konsumiere, läuft noch alles.
Anbei ein vereinfachter Code, der leider ebenso nicht funktioniert.
Server:
public class Zeit : Interface.IZeit
{
public Zeit()
{
int _sekundeAlt = System.DateTime.Now.Second;
while (true)
{
if (_sekundeAlt != System.DateTime.Now.Second)
{
if (ZeitEvent != null) ZeitEvent(this, new ZeitEventArgs() {Sekunde = DateTime.Now.Second});
_sekundeAlt = System.DateTime.Now.Second;
}
}
}
#region Implementation of IZeit
public event EventHandler<ZeitEventArgs> ZeitEvent;
#endregion
}
Client:
class Program
{
static void Main(string[] args)
{
var zyanConnection = new Connection();
zyanConnection.OpenClient("Zeit", "127.0.0.1");
var zeit = zyanConnection.CreateProxy<IZeit>();
zeit.ZeitEvent += (s, e) => { Console.WriteLine(e.Sekunde); };
Console.ReadLine();
}
}
Interface für Zyan:
public interface IZeit
{
event EventHandler<EventArgs.ZeitEventArgs> ZeitEvent;
}
Meine Zyan Configuration sieht wie folgt aus:
ZyanComponentHost.LegacyBlockingEvents = true;
var tcpBinaryServerProtocolSetup = new TcpBinaryServerProtocolSetup();
tcpBinaryServerProtocolSetup.UseWindowsSecurity = true;
tcpBinaryServerProtocolSetup.TcpPort = port;
_zyanComponentHost = new ZyanComponentHost(name, tcpBinaryServerProtocolSetup)
Könnt ihr mir vielleicht sagen, ob etwas fehlt?
Gruß
..Heinz..
Hallo m.knigge,
ich habe "Scanner Address Stamping" und "Scanner Delimiter" schon deaktiviert. Der "two-way Mode" sowie "ACK/NACK" sind aktiviert.
Antworten von der "Ladestation" bekomme ich angezeigt, von daher ist es richtig eingerichtet; nur das Schicken von Nachrichten vom PC zum Scanner funktioniert nicht. Deshalb bin ich mir sicher, dass es am Schreiben zum COM-Port liegt...
Die Leerzeichen habe ich inzwischen entfernt...g
Gruß
..Heinz..
Hallo Joetempes,
ich benutze de Powerscan M8300 der Firma Datalogic. In der Anleitung habe ich nichts über einen Header gefunden. Habe deinen Code jedoch getestet, vllt. habe ich in der Anleitung etwas überlesen; aber es funktionierte leider nicht 😦
Text sollte man eigentlich direkt hin schicken können, mit einem "CR" am Ende, aber auch das nimmt er nicht an.
Trotzdem danke für die Antworten
..Heinz..
Hallo herbivore,
habe ich auch schon versucht, aber genau das gleiche.
Wenn ich normalen Text hinschicke, wird dieser auch nicht angezeigt.
Das Lesen vom Scanner funktioniert ohne Probleme, nur beim Hinschicken will er nicht
Gruß
..Heinz..
Hallo,
ich habe ein kleines Problem und weiß absolut nicht weiter.
Ich habe eine Barcodescanner, er seriell angebunden ist.
Eingescannte Daten auslesen ist kein Problem. Nur würde ich gerne, nachdem ein Barcode gescannt wurde, auf das Display des Scanners einen Text senden bzw. die rote bzw. die gründe Kontrolleuchte aufleuchten lassen.
Der Code, um die grüne Leuchte einzuschalten ist
ESC [ 6 q
.
Ich sende die Daten wie folgt an den Scanner
public string Esc = ((char)27).ToString();
public void WriteDataToSerialPort(string data)
{
if (_serialPort != null && _serialPort.IsOpen)
{
byte[] buffer = Encoding.ASCII.GetBytes(data);
_serialPort.Write(buffer, 0, buffer.Length);
_serialPort.BaseStream.Flush();
}
}
public void Led()
{
WriteDataToSerialPort(Esc + "[ 6 q");
}
Nur wird der Befehl vom Scanner nicht angenommen.
Habe ich vlt. etwas bei der Übertragung vergessen?
Gruß
Heinz
Hi,
ich habe ein Problem beim Anzeigen eines Dialoges im Bootstrapper.
Ich will im Bootstrapper einen Dialog anzeigen. In dem Dialog werden Einstellungen vorgenommen, die für den Start des Programms wichtig sind. Wenn dieser geschlossen wird, soll die ShellView angezeigt werden.
public class Bootstrapper : Caliburn.Micro.Bootstrapper
{
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
base.OnStartup(sender, e);
if (new Models.Start().Init())
{
var windowManagerShell = new WindowManager();
var viewModelShell = new ViewModels.ShellViewModel();
windowManagerShell.ShowDialog(viewModelShell);
base.Configure();
}
}
}
In Models.Start().Init() wird der Dialog zum Setzen der Einstellungen geöffnet. Die ShellView wird allerdings nicht angezeigt.
Ich verstehe nicht, wo der Fehler sein könnte.
Vllt. könnt ihr mir helfen.
Gruß
Heinz
Hi,
ich habe ein kleines Problem, bei den Ihr mir bestimmt helfen könnt.
Ich möchte einen CrystalReport ausdrucken. Dafür verwende ich
reportDocument.PrintOptions.PrinterName = printerName;
reportDocument.PrintToPrinter(quantity, false, 0, 0);
Jetzt habe ich in dem Drucker in der Systemsteuerung eine neue Papierherkunft eingestellt. Der CrystalReport wird jedoch immer auf dem im Drucker eingestellten Standardfach ausgedruckt.
Gibt es eine Möglichkeit, die Einstellungen aus dem Drucker aus der Systemsteuerung zu übernehmen, ohne alle Einstellungen per Hand im Programm zu hinterlegen?
Gruß
Heinz
Hi,
ich bin eben an einem Punkt gekommen, an dem ich nicht mehr weiter weiß.
Ich habe mir einen CrystalReport erstellt (VS 2010).
Und möchte nun eine Datenquelle hinterlegen, damit ich im Designer die Datenfelder darauf ziehen kann. Und da komme ich zu dem Punkt.
Ist es möglich, ein .NET-Objekt einer DLL als Datenquelle zu hinterlegen? Ich bekomme nur die Objekt des aktuellen Projektes angezeigt, aber nicht die Objekte von eingebundenen DLLs. Vllt. habe ich nur etwas übersehen.
Dankeschön im Voraus
Hi,
das Problem ist gelöst. =)
Danke an alle die mir geholfen haben.
Ich habe den Ansatz von FZelle etwas abgeändert umgesetzt und habe mir jetzt ein ReadOnlydictionary gebaut, in dem ich für jeden Eintrag (Key) die Eigenschaft IsReadOnly gesondert auf true oder false (je nachdem, ob der Wert (Value) geschützt sein soll, oder nicht.
@herbivore: Es geht mir nicht darum, dass ich nicht wissen will, wie es auch anders (vllt. besser) geht. Aber wenn ich ein Problem habe, das ich gerne lösen würde, interessiert es mich in erster Linie was ich falsch gemacht habe, bzw. was ich vergessen habe.
Nochmal Danke an alle =)
Hallo Palladin007,
das hast du richtig verstanden 🙂 Vielen Dank für deine Antwort und das Beispiel.
Aber ich muss Th69 Recht geben. Der Zugriff auf die Properties eines eingefügten Objektes ist immernoch da...
Trotzdem danke für die Antwort 🙂
Ich suche nach einer Möglichkeit, eine Liste an einer zentralen Stelle zur Verfügung zu stellen, auf die man von allen Formularen (in WinForms) und von allen Windows (WPF) Zugriff hat. So dass z.B. Window1 einen Eintrag schreibt, der von Window2 gelesen, aber nicht verändert werden kann. Ich will darüber Daten verarbeiten, die zur Information des Benutzers dienen.
Ich weiß, wie man Daten von einem Formular an ein anderes (sicher und konform) übergibt. Nur interessiert es mich, wie man diese Lösung implementieren könnte.
Hallo FZelle,
ich will dir jetzt nicht zu nahe treten, aber wieso willst du wissen, dass es keinen Architekturansatz gibt? Nur ein kleiner Auszug aus meinen Projekten: Ich programmiere mit WPF und WinForms in C#, VB.NET und VBA, weiß was MVVM ist und weiß, wie ich es benutzen kann. Ebenso verwende ich Caliburn.Micro für MVVM. Für IoC verwende ich z.B. Windsor Container. Diese Themen sind so weitreichend, dass es verständlich ist, wenn man Fragen dazu hat.
Entschuldige, wenn meine Frage ein Thema anspricht, das so nicht umgesetzt werden soll. Aber wissen zu wollen, wie man ein Problem lösen kann (es geht mir nicht darum, fertigen Code zu bekommen, ein Denkanstoß reicht vollkommen), dann eine einfache Lösung umzusetzen und daran rum zu basteln bis sie "groß" ist und passt, ist m.M.n. nichts verwerfliches. Wir wollen alle lernen, sonst wäre wir nicht hier. Und da sollte es erlaubt sein, Fragen stellen zu dürfen ohne dass einem die Qualifikation und das Verständnis für Programmierung und Softwareentwicklung abgesprochen wird.
Ich bin froh über alle Hilfestellungen, egal in welcher Form. Aber was ich nicht mag ist, wenn man Qualifikationen abgesprochen bekommt, nur weil man etwas anders löst als es andere für richtig empfinden.
Zurück zum Thema. Kannst du mir einen kleinen Denkanstoß geben? Vllt. auch in eine andere Richtung. Ich bin für alles offen, wenn ich etwas neues lernen kann.
Hallo FZelle,
ich weiß, dass globale Variablen nicht gut sind. Es ist nur ein Test, der später verbessert wird 😉 Kannst du mir einen kleinen Anstoß geben, wie da am besten anfange?
Hallo Sarc und Th69. Danke für eure schnellen Antworten.
@Sarc: Was ich vorhabe ist ein Dictionary, das global im Programm verfügbar ist. Man kann von überall (zum lesen und schreiben) auf diese Liste zugreifen. Ich habe jetzt implementiert, dass ich sagen kann, ob bestimmte Items gelöscht werden dürfen: Add(item, canDeleted). Auslesen geht immer. Nur kann man über list[x] das Item auslesen und es verändern (ggf. sogar leeren). Und genau das würde ich gerne verhindern.
@TH69: Danke für deine Antwort. Aber ich würde es gerne generisch machen, so dass ich Objekte anhängen kann, ohne dass ich ihre Struktur kenne.
Hi,
ich habe eine kleine Frage zur List<T>.
In der List<T> gibt es ja die Funktion "AsReadOnly", mit der ich eine neue Collection bekomme, die kein Schreiben in die Collection ermöglicht.
Nun mein Problem und meine Frage.
Wenn ich als T eine eigene Klasse hinterlege, die z.B, zwei Properties hat. Und ich aus der ReadOnlyCollection ein Item auslese und eines der beiden Properties verändere. Wird dies gemacht.
Gibt es eine Möglichkeit, den Speicherbereich auch ReadOnly zu machen, so dass die komplette Liste, inkl. der Items schreibgeschützt ist?
Gruß
..Heinz..
Hi,
ich habe eine kleine Frage.
Ich habe in einer DLL eine View und ein ViewModel.
Diese will ich aus einer Application öffnen. Ich mache das mit
Caliburn.Micro.ViewModelBinder.Bind(viewModel, view, null);
var rootView = ViewLocator.LocateForModel(viewModel, null, null)
Wenn ich mir jetzt jedoch die View anzeige, bekomme ich nur die Meldung > Fehlermeldung:
Cannot find view for...
Wo muss ich den Bootstrapper setzen? In der DLL oder in der Anwendung? Muss etwas bestimmtes in den Bootstrapper? Brauche ich eine App.xaml?
Ich hoffe, ihr könnt mir weiter helfen =)
Hi,
ich habe mit dem "Interop Forms Toolkit" ein "VB6 Interop UserControl" erstellt.
Das Control kann ich nun in Word 2007 in ein Formular (VBA) einfügen und funktioniert.
Wenn ich es in Word 2010 (VBA) einfügen will, dann wird es mir nicht in der Werkzeugsammlung angezeigt. In der Liste, die mir über den Menüpunkt "Zusätzliche Steuerelement" erscheint es auch nicht.
Woran kann es liegen, dass es unter Word 2007 funktioniert, in Word 2010 jedoch nicht?
Hallo Rainbird,
kein Problem, dass die Antwort etwas gedauert hat. Zyan ist eine super Komponente und kostenlos. Da kann man es nicht auch noch verlangen, dass man so schnelle Antwortzeiten hat, wie bei einer Komponente, die richtig Geld kostet 😉
Schade dass es (noch) nicht funktioniert. Aber es beruhigt mich, dass die Anfrage auch von anderen gestellt wurde 🙂
Kannst du es abschätzen, wann es implementiert wird oder ist es nur auf der ToDo-Liste für eine spätere Version, die irgendwann kommt?
Gruß
..Heinz..
Hallo Rainbird,
ich verwende die aktuelle Version (2.3) und habe vllt. einen "Fehler" festgestellt.
Ich habe einen Server, der eine Funktion implementiert, die als Parameter eine List<T1> erwartet und eine List<T2> zurück gibt.
public List<T2> Function<T1, T2>(List<T1> list)
Wenn ich vom Client jedoch diese Funktion aufrufe, bekomme ich die Fehlermeldung> Fehlermeldung:
Methode nicht gefunden
Ich habe einen Test gemacht, ob es vllt. daran liegt, dass ich zwei verscheiden Typen verwende (T1 und T2) und habe nur T1 verwendet. Da kan allerdings der gleiche Fehler.
Wenn ich in der Funktion jedoch den Typ fest angebe, dann funktioniert es.
public List<T1> Function<T1>(List<Article> list)
Woran kann es liegen, dass ich keinen anonymen Typparameter als Funktionsparameter benutzen kann?
Gruß
..Heinz..
Hallo zoomi,
viele dank für deine schnelle und hilfreiche Antwort =) Funktioniert 👍
Hallo,
ist es möglich, ein Func<T> als Parameter eines Attributs zu definieren?
Ich möchte ein Property mit einem Attribut ausstatten, das eine Überprüfung des Proertywertes durchführt. Dafür habe ich mir einen Validator gebaut.
Nun würde ich jedoch den Validationsvorgang dynamisch gestalten, so dass ich eine eigene Funtion (die immer bool zurück gibt) definieren und in das Attribut schreiben kann.
[ValidationAttribute(() => {...}, ErrorMessage = "...")]
public string Name { get; set; }
Wenn ich das Property attributiere bekomme ich die Fehlermeldung: > Fehlermeldung:
Der Ausdruck kann keine anonymen Methoden oder lambda-Ausdrücke enthalten.
Ist mein Vorhaben möglich?
Ist es möglich, in einem T4-Script auf eine static variable einer anderen Klasse zuzugreifen? So dass ich die Variable auch aus einer anderen Klasse auslesen kann und nicht aus der partial Klasse?
Ist es möglich, die Variable zu setzen, im T4-Script auszulesen und danach das T4-Script auszuführen?
Hallo talla,
das wars gewesen...ich habe meine ursprüngliche Collection benutzt.
Dankeschön 😃
Hallo talla,
_collectionView = CollectionViewSource.GetDefaultView(Collection);
_collectionView.Filter =...
Die Collection binde ich an ein DataGrid in meiner View. Das DataGrid wird richtig gefüllt/gefiltert.
Wenn ich nun jedoch die _collectionView mit foreach durchlaufe, bekomme ich alle Einträge geliefert und nicht nur die, die gefiltert im DataGrid stehen.
Ich lese _collectionView erst aus, nachdem ich die Filter-Property gesetzt habe. Bin ich damit auf dem richtigen Weg, oder gibt es eine Liste innerhal der _collectionView, die ich durchlaufen muss?
Hi talla,
danke für deine Antwort.
Genau da liegt mein Problem. Ich weiß nicht, wie ich an die (neue) CollectionView heran komme.
Ich habe schon gesucht, aber keine Information dazu gefunden, woher ich die CollectionView bekomme, die nur die gefilterten Objekte beinhaltet.
Hi,
ich filtere eine Collection mit
CollectionViewSource.GetDefaultView(CollectionName).Filter...
Das funktioniert so wie es soll. Ich bekomme in der Oberfläche nur die Datensätze angezeigt, die ich zum Filtern selektiert habe.
Was ich nicht hin bekomme, ist die gefilterten Einträge zu ermitteln. Wenn ich die Collection öffne, stehen dort die Einträge unverändert drin. Und zwar alle Einträge, die vor der Filterung schon vorhanden waren.
Nun meine Frage, wo kann ich die gefilterten Einträge auslesen um mit ihnen weiter zu arbeiten?
Vielen Dank im Voraus 😃
Hallo chavez,
das wäre die beste Möglichkeit, wenn der Benutzer Zugriff auf das Laufwerk hätte. Es ist ein PC, der nicht zur Domäne gehört und daher der Benutzer auch nicht in der Domäne bekannt ist. Der Benutzer muss auch nur auf das Laufwerk zugreifen sonst nichts. Der Benutzername und das Kennwort, um auf die Freigabe zugreifen zu können, ist bekannt.
Hi,
es ist bestimmt einfach zu beantworten...
Ich lasse ein Script in einem geplanten Task laufen. Der Task wird auch ausgeführt, wenn kein Benutzer angemeldet ist (Der Task ist einem Benutzer zugeordnet).
Jetzt muss ich im Script auf ein Netzlaufwerk zugreifen, für das ich Benutzernamen/Kennwort übergeben muss. Ein Netzlaufwerk funktioniert ja im geplanten Task nicht, da es einen angemeldeten Benutzer voraussetzt.
Meine Frage ist nun, wie bekomme ich im Batch (in der Kommandozeile) die UserCredentials übergeben? \IP\Freigabename ...
Hallo Sarc,
Danke für dein Beispielprojekt 😃
Hallo ErfinderDesRades,
Danke für deine Hilfe 😃 Das mit dem DefaultValue habe ich nicht gewusst.
Hallo ErfinderDesRades,
habe jetzt eine neue Klasse
public class TextBoxHelper
erstellt. Sie enthält den Code von stackoverflow
public static readonly DependencyProperty UpdateSourceOnKey = DependencyProperty.RegisterAttached(
"UpdateSourceOnKey",
typeof(Key),
typeof(TextBox[B]Helper[/B]),
new FrameworkPropertyMetadata(false)
);
public static void SetUpdateSourceOnKey(UIElement element, Key value)
{
//TODO: wire up specified key down event handler here
element.SetValue(UpdateSourceOnKey, value);
}
public static [B]Key[/B] GetUpdateSourceOnKey(UIElement element)
{
return (Key)element.GetValue(UpdateSourceOnKey);
}
Leider bekomme ich nun, beim Öffnen des ViewModels, folgende Fehlermeldung > Fehlermeldung:
{"Der Standardwerttyp stimmt nicht mit dem Typ der Eigenschaft "UpdateSourceOnKey" überein."}
Nun meine Frage, was ist mit Standardwerttyp gemeint?
Hallo Sarc,
danke für die Mühe, die du dir machst.
Den Code habe ich schon in der MSDN gefunden. Jedoch komme ich an der Stelle "t.Session" nicht weiter.
Wenn ich
var t = new MyTemplate();
schreibe, wir automatisch eine neue Instanz der Klasse erstellt. Aber ich kann nicht auf "Session" zugreifen. Muss ich irgendwo (im T4-Script) "MyTemplate" als Namen hinterlegen?
Hallo ErfinderDesRades,
danke für deine Antwort.
Habe mir jetzt eine neue Klasse erstellt, die von TextBox erbt und das DependencyProperty, sowie die beiden Methoden beinhaltet.
Was ich noch nicht so ganz verstanden habe ist, dass bei "GetUpdateSourceOnKey" als Rückgabewert "Boolean" steht. und in der Funktion "Key" zurück gegeben wird. Welcher Typ stimmt? Muss ein "bool" zurück gegeben werden?
Hallo Sarc,
ich hoffe, ich kann dir "weiterhelfen". Bin noch Neuling in dem Gebiet. Daher kam ich auch nicht direkt auf T4. Habe damit bisher noch nichts gemacht.
Ich habe das T4-Script (MyClass.tt) und rufe das über
var _myClass = new MyClass
auf. Die "TextTransform.exe" rufe ich nicht auf.
Mein T4-Script läuft ohne Probleme. Ich habe jetzt nur noch ein Problem mit der Parameterübergabe. Die Deklaration des Parameters im T4-Script ist kein Problem. Ich kann auch damit arbeiten (habe ihn testweise mauell im Script gefüllt). Er wird korrekt ausgelesen und verarbeitet. Nur bekomme ich es nicht ihn, ihn von außerhalb zu füllen. Ich habe diesen Beitrag in MSDN gefunden T4 Parameter, werde jedoch nicht schlau daraus.
Nun meine Frage: Hat schonmal jemand versucht, ein Parameterfeld zu füllen? Wenn ja, wie muss ich vorgehen?
Hallo,
ich habe ein kleines Problem mit einer gebundenen TextBox.
Wenn ich in der TextBox eine Taste drücke soll eine Funktion ausgeführt werden. In der Funktion wird geprüft, welche Taste gedrückt wurde. Wenn es "Enter" ist, wird das Property, das an die TextBox gebunden ist, ausgelesen und verarbeitet.
Das funktioniert so, bei der ersten Eingabe in die TextBox. Wenn ich jedoch den Wert ändere, wird diese Änderung nicht berücksichtigt und die Verarbeitung mit der alten Eingabe ausgeführt. Wenn ich den Wert wieder ändere, wird die Verarbeitung mit dem vorangegangen Wert (der nicht mehr in der TextBox steht) durchgeführt.
Es wird also immer der vorhergehende Wert der TextBox an das Property gebunden, aber nicht der Wert, der zum Zeitpunkt des KeyDown-Events in der TextBox stand.
Ich habe nun schon etwas dazu gefunden: KeyDown in TextBox
Die zweite Antwort finde ich ganz passend, da ich MVVM umsetze. Jedoch klappt der Code nicht.
Nun meine Frage: Wo muss ich das zusätzliche DependencyProperty hinterlegen? Muss ich einen neue TextBox erstellen, die von TextBox erbt und dort das DependencyProperty einfügen?
Danke Sarc für die Mithilfe und das Stichwort "T4", das mich dann zum richtigen Vorgehen gebracht hat 😃
Ich habe vor, mithilfe von T4 ProxyKlassen, ohne Interface zu erstellen. Dafür muss ich die XML-Datei, in der der Aufbau der Klassen hinterlegt ist, auswählen können. Aber mit
<#@ parameter type="System.Object" name="Object" #>
sollte es funktionieren.
Hallo Sarc,
danke für die schnelle Antwort.
Habe mich etwas unklar ausgedrückt...
Ich habe nun meine Anwendung und meine DLL, in der das T4-Script liegt und die Klasse erzeugt. Ist es nun möglich, dem T4-Script von außerhalb (meine Anwendung aus) den Speicherort der XML-Datei mitzuteilen?
Habe es heraus gefunden.
<#@ parameter type="System.Object" name="Object" #>
Hallo Sarc,
T4 funktioniert 😃
Gibt es eine Möglichkeit, dem T4-Script den Dateinamen der XML-Datei als Parameter mitzugeben?
Hallo Roland, danke für deine Antwort 😃
daher auch derverwirrede Titel mit Dynamic. Wenn ich ein Dynamic
_dyn as new ExpandoObject();
erstelle, dann bekomme ich ja imVisual Studio auch die Properties zur Entwurfszeit angezeigt. Wenn ich eine neue Klasseerstelle und dort Properties anlege,sind diese direkt in IntelliSense anzeigbar. Wie wird das intern gemacht? Ich habe bisher noch nichts richtiges zu dem Thema finden können.
Danke fürdie Antworten.
Mit design-time meine ich zur Entwurfszeit, also in der IDE.
Folgendes,wenn man eine neue Klasse erstellt und die dann Properties bekommt, werden diese Properties in der IntelliSense direkt angezeigt. Ich hätte es nun gerne, dass ich das gleiche machen kann, nur dass ich die Proeprties nicht selbst manuell einfüge, sondern dass diese über eine Konfigurationsdatei autoamtisch geladen werden.
Beispiel
DynamicClass _dynamicClass = new DynamicClass(Pfad zur XML-Datei)
Und wenn ich dann _dynamicClass. mache, hätteich gerne in der IntelliSense alle Properties angezeigt, die in der übergebenen XML-Datei stehen.
Es geht mir nicht darum, dass es mit einem DynamicObject umgesetzt werden muss. Mich würde es nur interessieren, ob esüberhaupt möglich ist, in der design-time solche Veränderungen durchführen zu können.
Hallo,
ich habe eine Klasse, die von DynamicObject erbt. Zur Design-Time kann ich einer Instanz der Klasse neue Felder, Properties usw. hinzufügen und Zur Laufzeit über Dictionary.
Nun meine Frage, ist es möglich, in Konstruktor z.B. eine XML-Datei mit den Feldern und Properties, die in die Instanz kommen sollen, zu übergeben, dass ich sie zur Design-Time angezeigt bekomme?
Beispiel:
DynamicClass _dynamicClass = new DynamicClass(Pfad zur XML-Datei)
Vielen Dank im Voraus
Hallo talla,
das Control, das ich in der View habe, soll ausgedruckt werden.
Im ViewModel habe ich eine Methode, um Controls direkt drucken zu können. Als Parameter der Methode wird das entsprechende Control übergeben. Um dies jedoch mit MVVM "bestmöglich" umsetzen zu können, wollte ich CodeBehind vermeiden und so eben eine generische Methode zum Drucken von Controls zentral halten und über die Views ansprechen.
Hi,
ich wollte etwas neues versuchen, weiß auch nicht, ob es so funktioniert wie ich es mir vorstelle.
Ich habe eine View und ein ViewModel. In der View habe ich ein Control, welches in der View verändert wird. Nun möchte ich das komplette Control an das ViewModel übergeben. Ich habe einen Button angelegt und rufe die Methode via Message.Attach="Methode(Controlname)" auf.
Jedoch funktioniert es nicht, dass ich das Object übergebe. Properties des Controls kann ich übergeben, aber nicht das komplette Control.
Nun meine Frage: Geht das? Wenn nein, wie kann man es sonst lösen, ohne CodeBehind im Window?