Super prosta próbka MVVM-Light WP7?

Szukam próbki, która demonstruje w najlżejszy możliwy sposób:

Model, który wywołuje usługę internetową opartą na SOAP; regularnie przeprowadza ankietę, aby uzyskać najnowszą wartość (Załóżmy, że usługa SOAP Zwraca wartość logiczną). Model powinien również obsługiwać wywoływanie metody SOAP, która zmienia wartość logiczną na serwerze.

Model widoku, który umożliwia przypisanie podstawowych elementów logicznych do kontrolek w widoku (np. do pola wyboru).

Widok z powyższym checkboxem kontrolka powiązana z podstawową wartością logiczną. W zależności od przedziału ankiety pole wyboru będzie aktualizowane wraz ze zmianą stanu serwera. Jeśli pole wyboru zostanie kliknięte, zdarzenie zostanie wysłane do modelu, co spowoduje aktualizację serwera.

Optymalnie ta próbka będzie działać na Windows Phone 7, ale w szczypcie byłbym zadowolony z czegoś, co obsługuje SL3(nie wolno używać trasowania poleceń SL4).

Zmagam się z próbami zrozumienia, jak sprawić, by MVVM-Light działało dla mnie i podejrzewam, że że ekspert potrafi szybko zakodować taką próbkę... Podejrzewam również, że jest to dość powszechny wzór dla wielu aplikacji.

Author: tig, 2010-09-07

2 answers

Mick N ' S pointer help, but what really got me over the hump was this post by Jeremy Likness: http://csharperimage.jeremylikness.com/2010/04/model-view-viewmodel-mvvm-explained.html

Oto próbka dla dobra innych (zakładając, że nie robię nic naprawdę głupiego):

Najpierw zacząłem używać projektu Mvvm-Light Windows Phone 7.

Dodałem pole wyboru do mojej strony głównej.xaml:

{[0]}

Notice the IsChecked is bound to Switch1.PowerState using the TwoWay mode so that the property flows both ways.

A key learning for me is how to enable communication from my timer callback (TimerCB) which will be running on a new thread to the Silverlight UI thread. I used the Mvvm-Light DispatcherHelper.CheckBeginInvokeOnUI helper which waits on the UI thread.

I then had to decide whether to implement INotifyPropertyChanged myself in my model, or use Mvvm-Light's ViewModelBase implementation. I actually tried it both ways and had it working but decided I liked using ViewModelBase better because it supports "broadcast" and I think in my actual project that will be handy because I will have multiple ViewModels. It seems a bit uncouth to be basing a "Model" on ViewModelBase class, but I don't think there's any harm in doing so. (???).

My model .cs is below.

public class OnOffSwitchClass : ViewModelBase // ignore that it's derived from ViewModelBase!
{
    private const Int32 TIMER_INTERVAL = 5000;  // 5 seconds
    private Timer _timer;

    // Upon creation create a timer that changes the value every 5 seconds
    public OnOffSwitchClass()
    {
        _timer = new System.Threading.Timer(TimerCB, this, TIMER_INTERVAL, TIMER_INTERVAL);
    }

    private static void TimerCB(object state)
    {
        // Alternate between on and off
        ((OnOffSwitchClass)state).PowerState = !((OnOffSwitchClass)state).PowerState;
    }

    public const string PowerStatePropertyName = "PowerState";

    private bool _myProperty = false;

    public bool PowerState
    {
        get
        {
            return _myProperty;
        }

        set
        {
            if (_myProperty == value)
            {
                return;
            }

            var oldValue = _myProperty;
            _myProperty = value;

            // Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
            GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(() =>
                RaisePropertyChanged(PowerStatePropertyName, oldValue, value, true));
        }
    }
}

The MainViewModel.cs został zmodyfikowany zawierać następujące

private OnOffSwitchClass _Switch1 = new OnOffSwitchClass();

public OnOffSwitchClass Switch1 
{
    get
    {
        return _Switch1;
    }
}

I dodałem telefon do DispatcherHelper.Initialize (); in my App () constructor.

Czy to wygląda dobrze?
 8
Author: tig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-08 07:08:51

Sprawdź ten wpis na blogu Joost van Schaik, który był ostatnio linkowany (przez kP z pamięci?) na forach wp7.

Http://dotnetbyexample.blogspot.com/2010/07/using-mvvm-light-to-drive-windows-phone.html

Wątpię, że znajdziesz "próbkę", która również implementuje twoje" wymagania", ale przynajmniej z próbką, która robi to, co opisuje twój tytuł pytania, możesz się nauczyć, a następnie zastosować do niej bardziej szczegółowe wymagania.

 3
Author: Mick N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-18 00:57:17