Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Smarter way za MVVM attached behavior (Prism?)

[es] :: .NET :: WPF Programiranje :: Smarter way za MVVM attached behavior (Prism?)

[ Pregleda: 2988 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Smarter way za MVVM attached behavior (Prism?)14.11.2011. u 14:22 - pre 150 meseci
Dakle, imam checkbox kontrolu (infragistics) i treba da zakacim ValueChaged event iz te kontrole na ICommand u viewmodelu i da pri pozivu te komande dobijem neki argument koji je bindovan u XAMLu. Posto xamCheckEditor nema Command i CommandArgument morao sam da pribegnem pravljenju svog behaviora koji attachuje dva dependency propeortia na xamcheckeditor i zakaci event i omoguci poziv komande:

Code (csharp):

    public static class XamCheckEditorLOBBehavior
    {
        public static DependencyProperty ValueChangedProperty = DependencyProperty.RegisterAttached("ValueChanged",
                                                                                                    typeof(ICommand),
                                                                                                    typeof(XamCheckEditorLOBBehavior),
                                                                                                    new UIPropertyMetadata(XamCheckEditorLOBBehavior.ModifyValueChanged));
        public static DependencyProperty ValueChangedArgumentProperty = DependencyProperty.RegisterAttached("ValueChangedArgument",
                                                                                                            typeof(Tuple<bool,string>),
                                                                                                            typeof(XamCheckEditorLOBBehavior),
                                                                                                            new PropertyMetadata(null));


        public static void SetValueChanged(UIElement element, ICommand value)
        {
            element.SetValue(ValueChangedProperty, value);
        }
        public static void SetValueChangedArgument(UIElement element, Tuple<bool, string> value)
        {
            element.SetValue(ValueChangedArgumentProperty, value);
        }

        private static void ModifyValueChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
        {
           
            XamCheckEditor element = target as XamCheckEditor;
            if (element == null) throw new InvalidOperationException("This behavior can be attached to XamCheckEditor only.");
            if ((e.NewValue != null) && (e.OldValue == null))
            {
                element.ValueChanged += XamCheckEditor_ValueChanged;
            }
            else if ((e.NewValue == null) && (e.OldValue != null))
            {
                element.ValueChanged -= XamCheckEditor_ValueChanged;
            }
        }


        private static void XamCheckEditor_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            UIElement element = (UIElement)sender;
            ICommand command = (ICommand)element.GetValue(XamCheckEditorLOBBehavior.ValueChangedProperty);
            Tuple<bool, string> commandArgument = (Tuple<bool, string>)element.GetValue(XamCheckEditorLOBBehavior.ValueChangedArgumentProperty);
            command.Execute(commandArgument);
        }
    }


i to onda lepo zakacim

Code (xml):

<ig:XamCheckEditor Grid.Column="0"
     beh:XamCheckEditorLOBBehavior.ValueChanged="{Binding Path=toggleLOBCommand}"
     beh:XamCheckEditorLOBBehavior.ValueChangedArgument="{Binding Path=item}" />


i to radi.

Moje pitanje je, moze li ovaj c# kod gore da se napravi malo jednostavnije, tj ima li neka ispomoc po ovom pitanju da se smanji broj (ili bar velicina) ovih behavior klasa. Imam jos podosta ovakvih da napravim (sa obzirom na to da se vezuju za tip i vrstu eventa) pa me interesuje moze li ovo lakse i ima li vec nesto u MVVMu (Prismu?) sto mi odradi bar deo posla?

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
80.87.240.*



+1 Profil

icon Re: Smarter way za MVVM attached behavior (Prism?)14.11.2011. u 15:00 - pre 150 meseci
Imas u MVVMLight frameworku jednu klasu koja se zove EventToCommand koja sluzi za to.
Posto je MVVMLight OpenSource probaj. http://mvvmlight.codeplex.com/
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Smarter way za MVVM attached behavior (Prism?)14.11.2011. u 15:32 - pre 150 meseci
Hmm, zapravo, sad kad gledam njihov primer, taj behavoir izgleda postoji samo zbog silverlighta, ja izgleda mogu bez problema da iskoristim ovaj pristup za WPF kroz blend, bez potrebe za rucnim EventToCommand (cini mi se da je InvokeCOmmandAction upravo to):


Code (xml):


xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

<ig:XamCheckEditor Grid.Column="0">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ValueChanged">
            <i:InvokeCommandAction Command="{Binding Path=toggleLOBCommand}" CommandParameter="{Binding path=item}"/>                  
        </i:EventTrigger>                
    </i:Interaction.Triggers>
</ig:XamCheckEditor>
 


bas cu da probam... Ovo bi mi resilo sve proleme bez ijedne linije c# koda.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Smarter way za MVVM attached behavior (Prism?)14.11.2011. u 20:08 - pre 150 meseci
Radi

Jedino sto mora da se u reference doda System.Windows.Interactivity
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
*.teol.net.



+1 Profil

icon Re: Smarter way za MVVM attached behavior (Prism?)14.11.2011. u 22:18 - pre 150 meseci
Radis WPF umjesto Silverlight-a pih :P
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: Smarter way za MVVM attached behavior (Prism?)

[ Pregleda: 2988 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.