Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Hanz 08. 02. 2015, 18:44:56
-
Dobrý den, mám ve View
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Window.InputBindings>
<KeyBinding Command="{Binding HandleKeyEvent}" Key="Left" />
<KeyBinding Command="{Binding HandleKeyEvent}" Key="Right" />
<KeyBinding Command="{Binding HandleKeyEvent}" Key="Space" />
</Window.InputBindings>
a ve ViewModelu mám HandleKeyEvent, kterou jsem si přál zavolat.
public class ViewModel
{
public ViewModel()
{
}
public void HandleKeyEvent(KeyEventArgs key) // pridat object sender nepomohlo
{
// posleze odstranit, nepatri do aplikacni logiky
MessageBox.Show("abc");
}
}
Nevíte prosím někdo, proč se mi MessageBox nezobrací, co jsem špatně nabindoval?
Děkuji za jakoukoliv radu
-
Command neni event. Command dědí z rozhraní ICommand.
Proč si neprojdeš jeden jedinej tutoriál ?
-
Command="{Binding HandleKeyEvent}"
Bindovat mozes propertu nie metodu. V tomto pripade propertu typu ICommand (https://msdn.microsoft.com/en-us/library/system.windows.input.icommand(v=vs.110).aspx)
Mohlo by to napriklad vyzerat takto:
public class ViewModel
{
public ViewModel()
{
HandleKeyCmd = new MyCommand(() => { MessageBox.Show("Click"); });
}
public ICommand HandleKeyCmd { get;set;}
}
a binding:
Command="{Binding HandleKeyCmd}"
Implementaciu iterfacu si sprav alebo niekde pogoogli
-
Zkoušel jsem to, ale nevím, jak ten ÏCommand implementovat, když je potomek generický a enum Key neimplementuje ICommandSource.
Nezlobte se na mě, ale potřeboval bych trochu navést.
-
Děkuji
-
Prosim, poradte mi ještě jednu věc:
Jak se z MyCommand dostanu k property Key ze XAMLu?
Děkuji
-
Předáš to jako parametr do metody Execute
https://msdn.microsoft.com/en-us/library/system.windows.input.icommand.execute(v=vs.110).aspx
-
Zkoušel jsem to, ale nevím, jak ten ÏCommand implementovat, když je potomek generický a enum Key neimplementuje ICommandSource.
Nezlobte se na mě, ale potřeboval bych trochu navést.
Na Internetu jsou desítky, ba dokonce stovky nebo tisíce implementací rozhraní ICommand. A všechny jsou na jedno brdo, protože tam toho moc nevymyslíš.
-
Udělátko chudého muže, abys to rychle rozjel
<Window.InputBindings>
<KeyBinding Command="{Binding HandleKeyEvent}" CommandParameter="Left" Key="Left" />
...
public ICommand KeyCommand {get;private set;}
// v konstruktoru
KeyCommand = new MyCommand<string>(param=> NecoSKey(param));
....
private void NecoSKey(string param)
{
Console.Writeline(param);
}
Implementaci MyCommand si najdi na Internetu, budou jich stovky, všechny budou fungovat.
ViewModel raději poděd z ObservableObject, implementaci taktež najdi na Internetu, taktež stovky. Později využijes.
Nebo si skoukni video.
http://www.wug.cz/zaznamy/215-MVVM-prakticky
-
A je tam chyba, má tam být
<Window.InputBindings>
<KeyBinding Command="{Binding KeyCommand}" CommandParameter="Left" Key="Left" />
...