Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Wpf mvvm crud
Message
De
27/02/2019 20:34:15
John Baird
Coatesville, Pennsylvanie, États-Unis
 
 
À
27/02/2019 16:21:47
Information générale
Forum:
C#
Catégorie:
Formulaires
Titre:
Divers
Thread ID:
01666655
Message ID:
01666816
Vues:
68
>Hi John,
>
>
>About example in the link:
>https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial
>
>First case:
>In this case, I’ve :
>One Model: Song, and two ViewModel class:
>public class SongViewModel : ObservableObject and
>class AlbumViewModel , and View
>
>Notice: Model,ViewModel and View there are in link https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial
>(example6)
>
>
>
><Window x:Class="Example6.MainWindow"
>        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>        xmlns:local="clr-namespace:Example6"
>        Title="Example 6" Height="464" Width="530" >
>    <Window.DataContext>
>        <!-- Declaratively create an instance of our Album View Model-->
>        <local:AlbumViewModel />
>    </Window.DataContext>
>    <Grid>
>        <Grid.RowDefinitions>
>            <RowDefinition Height="Auto" />
>            <RowDefinition Height="Auto" />
>            <RowDefinition Height="Auto" />
>            <RowDefinition Height="Auto" />
>        </Grid.RowDefinitions>
>        <Grid.ColumnDefinitions>
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="Auto" />
>        </Grid.ColumnDefinitions>
>        <Menu Grid.Row="0" Grid.ColumnSpan="3">
>            <MenuItem Header="Test">
>                <MenuItem Header="Update Artist" Command="{Binding UpdateAlbumArtists}" />
>                <MenuItem Header="Add Artist" Command="{Binding AddAlbumArtist}" />
>                <MenuItem Header="Update Songs" Command="{Binding UpdateSongTitles}" />
>            </MenuItem>
>        </Menu>
>
>
>In this case working Update Artist and Update Songs (Button or menu)
>
>
>Second case:
>I’ve one model and one ViewMode and also working Update Artist and Update Songs (Button or menu)
>
>public class Song : ObservableObject  
>    {
>        #region Members
>        string _artistName;
>        string _songTitle;
>        #endregion
>
>
>        #region Properties
>        public string ArtistName
>        {
> 
>            get { return _artistName; }  
>            set
>            {
>                if (_artistName != value)
>                {
>                    _artistName = value;
>                    RaisePropertyChanged("ArtistName");
>                }
>            }
>        }
>
>        public string SongTitle
>        {
> 
>            get { return _songTitle; }        
>            set
>            {
>                if (_songTitle != value)
>                {
>                    _songTitle = value;
>                    RaisePropertyChanged("SongTitle");
>                }
>            }
>        }
>
>        #endregion
>    }
>
>class AlbumViewModelWithOuthSVM  
>    {
>        #region Members
>        private SongDatabase _database = new SongDatabase();
>        ObservableCollection<Song> _songs = new ObservableCollection<Song>();
>        int _count = 0;
>        #endregion
>
>        #region Properties
>        public ObservableCollection<Song> Songs
>        {
>            get
>            {
>                return _songs;
>            }
>            set
>            {
>                _songs = value;
>            }
>        }
>
>        private Song _selectedsongs;
>        public  Song  SelectedSongs
>        {
>            get
>            {
>                return _selectedsongs;
>            }
>            set
>            {
>                if (!Equals((_selectedsongs), value))
>                {
>                    _selectedsongs = value;
>                }
>            }
>        }
>
>        #endregion
>        #region Construction
>        public AlbumViewModelWithOuthSVM()
>        {
>            for (int i = 0; i < 3; ++i)
>            {
>                _songs.Add(new Song { ArtistName = _database.GetRandomArtistName, SongTitle = _database.GetRandomSongTitle });
>            }
>        }
>        #endregion
>
>        #region Commands
>        void UpdateAlbumArtistsExecute()
>        {
>            if (_songs == null)
>                return;
>
>            ++_count;
>            foreach (var song in _songs)
>            {
>                song.ArtistName = _database.GetRandomArtistName;
>            }
>          
>        }
>
>        bool CanUpdateAlbumArtistsExecute()
>        {
>            return true;
>        }
>
>        public ICommand UpdateAlbumArtists { get { return new RelayCommand(UpdateAlbumArtistsExecute, CanUpdateAlbumArtistsExecute); } }
>
>
>        void AddAlbumArtistExecute()
>        {
>            if (_songs == null)
>                return;
>
>            _songs.Add(new Song { ArtistName = _database.GetRandomArtistName, SongTitle = _database.GetRandomSongTitle });
>
>          
>        }
>
>        bool CanAddAlbumArtistExecute()
>        {
>            return true;
>        }
>
>        public ICommand AddAlbumArtist { get { return new RelayCommand(AddAlbumArtistExecute, CanAddAlbumArtistExecute); } }
>
>        void UpdateSongTitlesExecute()
>        {
>            if (_songs == null)
>                return;
>
>            ++_count;
>            foreach (var song in _songs)
>            {
>                song.SongTitle = _database.GetRandomSongTitle;
>            }
>        }
>
>        bool CanUpdateSongTitlesExecute()
>        {
>            return true;
>        }
>
>        public ICommand UpdateSongTitles { get { return new RelayCommand(UpdateSongTitlesExecute, CanUpdateSongTitlesExecute); } }
>
>        #endregion
>    }
>
><Window x:Class="Example6.MainWindow"
>        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>        xmlns:local="clr-namespace:Example6"
>        Title="Example 6" Height="464" Width="530" >
>    <Window.DataContext>
>        <!-- Declaratively create an instance of our Album View Model-->
>        <local:AlbumViewModelWithOuthSVM />
>    </Window.DataContext>
>    <Grid>
>        <Grid.RowDefinitions>
>            <RowDefinition Height="Auto" />
>            <RowDefinition Height="Auto" />
>            <RowDefinition Height="Auto" />
>            <RowDefinition Height="Auto" />
>        </Grid.RowDefinitions>
>        <Grid.ColumnDefinitions>
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="Auto" />
>            <ColumnDefinition Width="*" />
>        </Grid.ColumnDefinitions>
>        <Menu Grid.Row="0" Grid.ColumnSpan="3">
>            <MenuItem Header="Test">
>                <MenuItem Header="Update Artist" Command="{Binding UpdateAlbumArtists}" />
>                <MenuItem Header="Add Artist" Command="{Binding AddAlbumArtist}" />
>                <MenuItem Header="Update Songs" Command="{Binding UpdateSongTitles}" />
>            </MenuItem>
>        </Menu>
>        <Label Grid.Column="0" Grid.Row="1" Content="Example 6 - collection" />
>
>        <StackPanel Grid.Column=" 0" Grid.Row=" 2">
>            <Label Content="{Binding  SelectedSongs.ArtistName  }"/>
>            <Label Content="{Binding  SelectedSongs.SongTitle  }"/>
>        </StackPanel>
>        
>        <Button Grid.Column="1" Grid.Row="1" Content="Add new artist" Command="{Binding AddAlbumArtist}" />
>        <ListView  Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="2" 
>                  ItemsSource="{Binding Songs}" 
>                  SelectedItem="{Binding SelectedSongs, Mode=TwoWay}"   >
>            <ListView.ItemTemplate>
>                <DataTemplate>
>                    <StackPanel>
>                        <Label Content="{Binding ArtistName}" />
>                        <Label Content="{Binding SongTitle}" FontSize="10" />
>                    </StackPanel>
>                </DataTemplate>
>            </ListView.ItemTemplate>
>        </ListView>
>        <Button Grid.Column="2" Grid.Row="1" Content="Update Artist Name" Command="{Binding UpdateAlbumArtists}" />
>        <Button Grid.Column="3" Grid.Row="1" Content="Update Song Titles" Command="{Binding UpdateSongTitles}" />
>    </Grid>
></Window>
>
>
>
>
>
>
>My question is:
>
>Why in the second case, if I want to use one model and one VievModel, I have to use the RaisePropertiChanged ("...") in the model, while in the first case I have must to use two ViewMode?
>
>Should not there be in this case one model and one VM, and RaisePropertyChanged("...") to use Only in ViewModel ?

The propertychanged event is the correct mechanism to inform the view model that something has changed. Just focus on that methodology...
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform