WPF a MVVC - spravné volání z View(XAML) do viewModelu

Hanz

Dobrý den, mám ve View

Kód: [Vybrat]
    <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.

Kód: [Vybrat]
    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
« Poslední změna: 09. 02. 2015, 09:04:20 od Petr Krčmář »


Cyr

Re:WPF a MVVC - jak spravně zavolat z View(XAML) do viewModelu
« Odpověď #1 kdy: 08. 02. 2015, 19:36:13 »
Command neni event. Command dědí z rozhraní ICommand.

Proč si neprojdeš jeden jedinej tutoriál ?

Tomas

Re:WPF a MVVC - jak spravně zavolat z View(XAML) do viewModelu
« Odpověď #2 kdy: 08. 02. 2015, 19:41:13 »
Citace
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:

Kód: [Vybrat]
   
public class ViewModel
{
    public ViewModel()
    {
       HandleKeyCmd = new MyCommand(() => { MessageBox.Show("Click"); });
    }

    public ICommand HandleKeyCmd { get;set;}
}

a binding:
Kód: [Vybrat]
Command="{Binding HandleKeyCmd}"
Implementaciu iterfacu si sprav alebo niekde pogoogli

Hanz

Re:WPF a MVVC - jak spravně zavolat z View(XAML) do viewModelu
« Odpověď #3 kdy: 08. 02. 2015, 19:46:49 »
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.


Hanz

Re:WPF a MVVC - jak spravně zavolat z View(XAML) do viewModelu
« Odpověď #4 kdy: 08. 02. 2015, 19:48:19 »
Děkuji


Hanz

Re:WPF a MVVC - jak spravně zavolat z View(XAML) do viewModelu
« Odpověď #5 kdy: 08. 02. 2015, 20:16:13 »
Prosim, poradte mi ještě jednu věc:

Jak se z MyCommand dostanu k property Key ze XAMLu?

Děkuji

Cyr


Tomáš Roll

Re:WPF a MVVC - jak spravně zavolat z View(XAML) do viewModelu
« Odpověď #7 kdy: 09. 02. 2015, 10:28:24 »
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íš.

Tomáš Roll

Re:WPF a MVVC - spravné volání z View(XAML) do viewModelu
« Odpověď #8 kdy: 09. 02. 2015, 10:57:22 »
Udělátko chudého muže, abys to rychle rozjel

Kód: [Vybrat]
<Window.InputBindings>
        <KeyBinding Command="{Binding HandleKeyEvent}"  CommandParameter="Left" Key="Left" />
...

Kód: [Vybrat]
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


Tomáš Roll

Re:WPF a MVVC - spravné volání z View(XAML) do viewModelu
« Odpověď #9 kdy: 09. 02. 2015, 14:08:27 »
A je tam chyba, má tam být
Kód: [Vybrat]
<Window.InputBindings>
        <KeyBinding Command="{Binding KeyCommand}"  CommandParameter="Left" Key="Left" />
...