Mir wurde mehrfach die sog. CommandMap empfohlen, und macht auch einen sehr guten Eindruck, und die Laufzeit funktioniert auch.
Nur im Xaml-Designer zickt das Teil bei mir rum, und da weiß ich jetzt nix anderes, als euch mal zu fragen, ob ihr das im Anhang mal ausprobieren könnt, und mir rückmelden, ob euer Xaml-Designer auch spinnt, oder obs mein System ist, was iwie verdaddelt ist.
Also die CommandMap ist eine Klasse, wo man viele DelegateCommands reinschmessen kann, und dann kann man direkt im Xaml daran binden, und muss nicht für jeden Click eine Property erstellen, mit getter, private setter, backing-Field und Initialisierung der RelayCommands.
BeispielCode einer CommandMap mit 3 Commands:
Wie gesagt: Laufzeit wunderbar, nur inne Designzeit schrottets den Xaml-Designer:
Edit: Tja, wie's aussieht, habich den Bug gefixt.
Hab das ganze Kommentar-Gelaber entfernt, und an einigen Stellen was optimiert, und nun hatter aufgehört mit spinnen, und ich weiß eiglich nicht, warum
Edit: Schließlich hat sich das Mysteriöseste geklärt, und letztendlich kannich eine glaub bessere Alternative präsentieren.
Die Verbesserungen kann man noch endlos weiter treiben, als nächstes würde ich ein DelegateCommand erfinden, was seine Beschriftung, Icon etc. selber weiß, dann kann man im Xaml Templates dafür machen, die mit einem einzigen Binding ordentlich gestaltete MenuItems und Buttons hinhauen, inkl Text, Icon, Tooltip, Command natürlich, Commandparameter, Accessor-Key.
Den ganzen Kram kann man dann dynamisch vom Viewmodel aus steuern, so in die Richtung.
Aber erstmal habich mit klein Reflection erreicht, dass ein Command seinen Namen selber weiß, man den also nicht mehr eintippen muss beim Adden:
Funzt natürlich nicht bei anonymen Methoden.
Nur im Xaml-Designer zickt das Teil bei mir rum, und da weiß ich jetzt nix anderes, als euch mal zu fragen, ob ihr das im Anhang mal ausprobieren könnt, und mir rückmelden, ob euer Xaml-Designer auch spinnt, oder obs mein System ist, was iwie verdaddelt ist.
Also die CommandMap ist eine Klasse, wo man viele DelegateCommands reinschmessen kann, und dann kann man direkt im Xaml daran binden, und muss nicht für jeden Click eine Property erstellen, mit getter, private setter, backing-Field und Initialisierung der RelayCommands.
BeispielCode einer CommandMap mit 3 Commands:
C#-Quellcode
- public CommandMap Commands { get { return _Commands; } }
- private CommandMap _Commands;
- public void AnAction(object o) {
- AText += "\nAn Action!";
- }
- public void AnotherAction(object o) {
- AText += "\nAnother Action!";
- }
- public void ThirdAction(object o) {
- AText += "\nThird Action!";
- }
- public MainViewModel() {
- _Commands = new CommandMap();
- _Commands.AddCommand("AnAction", AnAction);
- _Commands.AddCommand("AnotherAction", AnotherAction);
- _Commands.AddCommand("ThirdAction", ThirdAction);
- }
Wie gesagt: Laufzeit wunderbar, nur inne Designzeit schrottets den Xaml-Designer:
Edit: Tja, wie's aussieht, habich den Bug gefixt.
Hab das ganze Kommentar-Gelaber entfernt, und an einigen Stellen was optimiert, und nun hatter aufgehört mit spinnen, und ich weiß eiglich nicht, warum
Edit: Schließlich hat sich das Mysteriöseste geklärt, und letztendlich kannich eine glaub bessere Alternative präsentieren.
Die Verbesserungen kann man noch endlos weiter treiben, als nächstes würde ich ein DelegateCommand erfinden, was seine Beschriftung, Icon etc. selber weiß, dann kann man im Xaml Templates dafür machen, die mit einem einzigen Binding ordentlich gestaltete MenuItems und Buttons hinhauen, inkl Text, Icon, Tooltip, Command natürlich, Commandparameter, Accessor-Key.
Den ganzen Kram kann man dann dynamisch vom Viewmodel aus steuern, so in die Richtung.
Aber erstmal habich mit klein Reflection erreicht, dass ein Command seinen Namen selber weiß, man den also nicht mehr eintippen muss beim Adden:
C#-Quellcode
- public MainViewModel() {
- _Commands = new CommandMap();
- _Commands.Add("AnonymousCommand", x => MessageBox.Show("AnonymousCommand"));
- _Commands.Add(AnAction);
- _Commands.Add(AnotherAction);
- _Commands.Add( ThirdAction, o => _AText.Length > 30);
- }
- public string AText { get { return _AText; } set { ChangePropIfDifferent(value, ref _AText, "AText"); } }
- private string _AText = "AText";
- public void AnAction(object o) {
- AText += "\nAn Action!";
- }
- public void AnotherAction(object o) {
- AText += "\nAnother Action!";
- }
- public void ThirdAction(object o) {
- AText += "\nThird Action!";
- }
Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „ErfinderDesRades“ ()