Ho bisogno di EventAggregator qui?

2

Sto imparando lo schema MVVM con C #, WPF e .NET Framework 4.5.1.

Uso la struttura MVVM Light per farlo e ora ho un dubbio. Leggendo il libro Modelli MVVM di Windows 8 rivelati vedo che l'autore utilizza Event Aggregator Pattern .

Non sono sicuro di averne bisogno, perché nel seguente ViewModel dovrei aumentare l'evento a EventAggregator e gestirlo sullo stesso ViewModel .

Ecco il mio ViewModel :

public class MainViewModel : ViewModelBase
{
    private RelayCommand doLoginCommand;

    /// <summary>
    /// The <see cref="UserName" /> property's name.
    /// </summary>
    public const string UserNamePropertyName = "UserName";

    private string _userName = null;

    /// <summary>
    /// Sets and gets the UserName property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public string UserName
    {
        get
        {
            return _userName;
        }

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

            RaisePropertyChanging(UserNamePropertyName);
            _userName = value;
            RaisePropertyChanged(UserNamePropertyName);
        }
    }

    /// <summary>
    /// The <see cref="UserPassword" /> property's name.
    /// </summary>
    public const string UserPasswordPropertyName = "UserPassword";

    private string _userPassword = null;

    /// <summary>
    /// Sets and gets the UserPassword property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public string UserPassword
    {
        get
        {
            return _userPassword;
        }

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

            RaisePropertyChanging(UserPasswordPropertyName);
            _userPassword = value;
            RaisePropertyChanged(UserPasswordPropertyName);
        }
    }

    public RelayCommand DoLoginCommand
    {
        get { return doLoginCommand; }
    }

    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {
        ////if (IsInDesignMode)
        ////{
        ////    // Code runs in Blend --> create design time data.
        ////}
        ////else
        ////{
        ////    // Code runs "for real"
        ////}

        this.doLoginCommand = new RelayCommand(ExecuteDoLogin);
    }

    private void ExecuteDoLogin()
    {
        Debug.WriteLine(_userName);
    }
}

E il suo XAML:

<Window x:Class="WPFMvvmApress.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{Binding MainViewModel, Source={StaticResource Locator}}">
    <Grid>
        <StackPanel x:Name="loginPanel" HorizontalAlignment="Center" Height="159" Margin="0" VerticalAlignment="Center" Width="349">
            <TextBox 
                x:Name="userName" 
                HorizontalAlignment="Left" 
                Height="23" 
                TextWrapping="Wrap" 
                VerticalAlignment="Top" 
                Width="231" 
                Margin="10,10,0,5" 
                Text="{Binding Path=UserName, Mode=TwoWay}"/>
            <TextBox 
                x:Name="userPassword" 
                HorizontalAlignment="Left" 
                Height="23" 
                TextWrapping="Wrap" 
                VerticalAlignment="Top" 
                Width="231" 
                Margin="10,5,0,5"/>
            <Button 
                x:Name="loginButton" 
                Content="Login" 
                HorizontalAlignment="Left" 
                VerticalAlignment="Top" 
                Width="75" 
                Margin="10,5" 
                Command="{Binding Path=DoLoginCommand}"/>
        </StackPanel>

    </Grid>
</Window>

Che ne pensi?

    
posta VansFannel 02.10.2014 - 15:39
fonte

1 risposta

1

L'idea generale di MVVM è di utilizzare ViewModel per modellare la vista in modo che i dati ViewModel si colleghino agli elementi della vista che di solito include il modello (per ulteriori informazioni, vedere la risposta a questa domanda: Come faccio a sapere se sto violando MVVM con WPF? ).

L'aggregatore di eventi o il mediatore viene utilizzato per trasmettere eventi tra i livelli che non dovrebbero essere a conoscenza l'uno dell'altro. Nell'esempio sopra riportato, l'associazione dei dati a un comando su ViewModel è il modo preferito per gestire eventi che possono essere associati a un comando.

    
risposta data 02.10.2014 - 17:12
fonte

Leggi altre domande sui tag