Overblog Suivre ce blog
Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

13 mai 2014 2 13 /05 /mai /2014 17:31

1 Permettre à l’application d’utiliser la fonction de recherche

 

Appxmanifest  , Onglet « Délclarations » Ajouter « Rechercher »

searchwinrt0

L’application apparait désormais dans la liste des applications pour lesquelles on peut effectuer une recherche

 

 

2- Afficher les résultats d'une recherche dans une page

 

SearchResultPage

On ajoute 1 page au projet pour afficher les résultats (SearchResultPage) .Dans le code behind on définit les éléments à afficher(ici je définis la source de la CollectionViewSource de la page)

 

        protected override void OnNavigatedTo(NavigationEventArgs e)

        {

            string queryText = e.Parameter.ToString();

            // On pourrait mettre à jour le titre de la page

           // pageTitle.Text = String.Format("Results for \"{0}\"", queryText);

            cvs.Source = new PersonService().GetAll(queryText);

        }

 

App.xaml.cs

On demande à naviguer vers la page permettant d’afficher les résultats que l’on a créé en passant les paramètres (texte saisi dans le champ de recherche)

 

        protected override void OnSearchActivated(SearchActivatedEventArgs args)

        {

            Frame rootFrame = Window.Current.Content as Frame;

            rootFrame.Navigate(typeof(SearchResultPage), args.QueryText);

        }

 

  • Utiliser SearchResultsPage de Visual Studio  

searchwinrt2.png

 

Il faudra affecter la source à resultsViewSource .exemple

resultsViewSource.Source = new PersonService().GetAll(queryText);

Et adapter les champs de la page et propriétés

 

3- Ajouter une liste de suggestions lors de la saisie

 

searchwinrt1

App.xaml.cs

Ajouter à la fin de la méthode OnLaunched

SearchPane.GetForCurrentView().SuggestionsRequested += App_SuggestionsRequested;

Et

On récupère la liste des noms de personnes correspondante à la saisie que l’on ajoute à la collection de suggestions.

 

private void App_SuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args)

        {

            PersonService personService = new PersonService();

            args.Request.SearchSuggestionCollection.AppendQuerySuggestions(personService.GetSuggestions(args.QueryText));

            args.Request.GetDeferral().Complete();

        }

Repost 0
Published by Romagny13 - dans WinRT
commenter cet article
7 mai 2014 3 07 /05 /mai /2014 13:14

On a un GridView et une ListView cachée(Visibility="Collapsed") .On utilise un VisualStateManager pour adapter la page . On a donc un GridView ... et une ListView lorsque la vue est "snapped" .

  <Page.Resources>

        <CollectionViewSource x:Name="groupedItemsViewSource"

                              Source="{Binding Countries}"

                              ItemsPath="Persons"

                              IsSourceGrouped="True" />

    </Page.Resources>

 

 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

       <!-- 1 GridView --> 

        <GridView x:Name="gv" ItemsSource="{Binding Source={StaticResource  groupedItemsViewSource}}"

                          AutomationProperties.AutomationId="ItemGridView"

                          AutomationProperties.Name="Grouped Items"

                          ItemTemplate="{StaticResource Standard250x250ItemTemplate}"

                          Margin="116,0,40,46" >

            <GridView.ItemsPanel>

                <ItemsPanelTemplate>

                    <VirtualizingStackPanel Orientation="Horizontal"/>

                </ItemsPanelTemplate>

            </GridView.ItemsPanel>

            <GridView.GroupStyle>

                <GroupStyle>

                    <GroupStyle.HeaderTemplate>

                        <DataTemplate>

                            <Grid Margin="20,0,0,0">

                                <Button AutomationProperties.Name="Group Title"

                                                Content="{Binding CountryName}"

                                                Style="{StaticResource TextBlockButtonStyle}"

                                        />

                            </Grid>

                        </DataTemplate>

                    </GroupStyle.HeaderTemplate>

                    <GroupStyle.Panel>

                        <ItemsPanelTemplate>

                            <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,50,0" />

                        </ItemsPanelTemplate>

                    </GroupStyle.Panel>

                </GroupStyle>

            </GridView.GroupStyle>

        </GridView>

       <!-- 2 ListView cachée --> 

        <ListView x:Name="lv"  ItemsSource="{Binding Source={StaticResource  groupedItemsViewSource}}" Visibility="Collapsed">

            <ListView.ItemTemplate>

                <DataTemplate>

                    <Grid Margin="6">

                        <Grid.ColumnDefinitions>

                            <ColumnDefinition Width="Auto"/>

                            <ColumnDefinition Width="*"/>

                        </Grid.ColumnDefinitions>

                        <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60">

                            <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>

                        </Border>

                        <StackPanel Grid.Column="1" Margin="10,0,0,0">

                            <TextBlock Text="{Binding FullName}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" MaxHeight="40"/>

                        </StackPanel>

                    </Grid>

                </DataTemplate>

            </ListView.ItemTemplate>

            <ItemsControl.ItemContainerStyle>

                <Style TargetType="FrameworkElement">

                    <Setter Property="Margin" Value="0,0,0,10"/>

                </Style>

            </ItemsControl.ItemContainerStyle>

        </ListView>

       

       <!-- 3 VisualStateManager -->          

        <VisualStateManager.VisualStateGroups>

            <VisualStateGroup x:Name="ApplicationViewStates">

                <VisualState x:Name="FullScreenLandscape" />

                <VisualState x:Name="Filled" />

                <VisualState x:Name="FullScreenPortrait" />

                <VisualState x:Name="Snapped" >

                    <Storyboard>

                         <!--cache le gridView et affiche la listView-->

                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="gv" Storyboard.TargetProperty="Visibility">

                            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>

                        </ObjectAnimationUsingKeyFrames>

                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lv" Storyboard.TargetProperty="Visibility">

                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>

                        </ObjectAnimationUsingKeyFrames>

                    </Storyboard>

                </VisualState>

            </VisualStateGroup>

        </VisualStateManager.VisualStateGroups>

    </Grid>

 Code behind

         public MainPage()

        {

            this.InitializeComponent();

 

            DataContext = new CountryListViewModel();   

            Window.Current.SizeChanged += Current_SizeChanged;

        }

 

        private  void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)

        {

           string viewValue = ApplicationView.Value.ToString();

           VisualStateManager.GoToState(this, viewValue, false);

        }

 

Autre possibilité (ApplicationView étant «  obsolète »)

        private  void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)

        {

 

            if (e.Size.Width < 550)

            {

                VisualStateManager.GoToState(this, "Snapped", false);

            }

            if (e.Size.Width > 550)

            {

                VisualStateManager.GoToState(this, "FullScreenLandscape", false);

            }

        }

 

 

snapp1

 

http://msdn.microsoft.com/en-us/library/windows/apps/hh465349.aspx

Repost 0
Published by Romagny13 - dans WinRT
commenter cet article
7 mai 2014 3 07 /05 /mai /2014 12:26

 ListView

On peut utiliser une CollectionViewSource groupée ou non

<Page.Resources>

        <CollectionViewSource x:Name="groupedItemsViewSource"

                              Source="{Binding Countries}"

                              ItemsPath="Persons"

                              IsSourceGrouped="True" />

        <CollectionViewSource x:Name="nonGroupedItemsViewSource"

                              Source="{Binding PersonsWithCountries}"

                              IsSourceGrouped="False" />

    </Page.Resources>

 

        <ListView x:Name="lv"  ItemsSource="{Binding Source={StaticResource  groupedItemsViewSource}}">

            <ListView.ItemTemplate>

                <DataTemplate>

                    <Grid Margin="6">

                        <Grid.ColumnDefinitions>

                            <ColumnDefinition Width="Auto"/>

                            <ColumnDefinition Width="*"/>

                        </Grid.ColumnDefinitions>

                        <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60">

                            <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>

                        </Border>

                        <StackPanel Grid.Column="1" Margin="10,0,0,0">

                            <TextBlock Text="{Binding FullName}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" MaxHeight="40"/>

                        </StackPanel>

                    </Grid>

                </DataTemplate>

            </ListView.ItemTemplate>

            <ItemsControl.ItemContainerStyle>

                <Style TargetType="FrameworkElement">

                    <Setter Property="Margin" Value="0,0,0,10"/>

                </Style>

            </ItemsControl.ItemContainerStyle>

        </ListView>

   

FlipView    

J’utilise la CollectionViewSource de l’exemple précédent

<FlipView ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}" Width="480" Height="270"

              BorderBrush="Black" BorderThickness="1">

            <FlipView.ItemTemplate>

                <DataTemplate>

                    <Grid>

                        <Image Width="480" Height="270" Source="{Binding Image}" Stretch="UniformToFill"/>

                        <Border Background="#A5000000" Height="80" VerticalAlignment="Bottom">

                            <TextBlock Text="{Binding FullName}" FontFamily="Segoe UI" FontSize="26.667" Foreground="#CCFFFFFF" Padding="15,20"/>

                        </Border>

                    </Grid>

                </DataTemplate>

            </FlipView.ItemTemplate>

        </FlipView>

Repost 0
Published by Romagny13 - dans WinRT
commenter cet article
7 mai 2014 3 07 /05 /mai /2014 01:47

Dans l'exemple j'affiche une liste de personnes rangée par pays .

-          Utiliser une CollectionViewSource ,

o   important la propriété IsSourcedGrouped

o   Source la source de base (exemple liste countries ici)

o   ItemsPath la liste des sous éléments(exemple la liste Persons)

-          ZoomedInView et ZoomedOutView j'affiche simplement une vue plus petite ici

 

<Page

    x:Class="WinRTBase.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="using:WinRTBase"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d">

    <Page.Resources>

        <CollectionViewSource x:Name="groupedItemsViewSource"

                              Source="{Binding Countries}"

                              ItemsPath="Persons"

                              IsSourceGrouped="True" />

    </Page.Resources>

 

 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

       

        <SemanticZoom x:Name="Zoom" Grid.Row="1" Margin="0,-3,0,0">

            <SemanticZoom.ZoomedInView>

                <GridView x:Name="gvCountries" ItemsSource="{Binding Source={StaticResource  groupedItemsViewSource}}"

                          AutomationProperties.AutomationId="ItemGridView"

                          AutomationProperties.Name="Grouped Items"

                          ItemTemplate="{StaticResource Standard250x250ItemTemplate}"

                          Margin="116,0,40,46">

                    <GridView.ItemsPanel>

                        <ItemsPanelTemplate>

                            <VirtualizingStackPanel Orientation="Horizontal"/>

                        </ItemsPanelTemplate>

                    </GridView.ItemsPanel>

                    <GridView.GroupStyle>

                        <GroupStyle>

                            <GroupStyle.HeaderTemplate>

                                <DataTemplate>

                                    <Grid Margin="20,0,0,0">

                                        <Button AutomationProperties.Name="Group Title"

                                                Content="{Binding CountryName}"

                                                Style="{StaticResource TextBlockButtonStyle}"

                                        />

                                    </Grid>

                                </DataTemplate>

                            </GroupStyle.HeaderTemplate>

                            <GroupStyle.Panel>

                                <ItemsPanelTemplate>

                                    <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,50,0" />

                                </ItemsPanelTemplate>

                            </GroupStyle.Panel>

                        </GroupStyle>

                    </GridView.GroupStyle>

                </GridView>

            </SemanticZoom.ZoomedInView>

            <SemanticZoom.ZoomedOutView>

                <GridView ItemsSource="{Binding Source={StaticResource  groupedItemsViewSource}}"

                          AutomationProperties.AutomationId="ItemGridView"

                          AutomationProperties.Name="Grouped Items"

                          ItemTemplate="{StaticResource MinimumItemTemplate}"

                          Margin="116,0,40,46">

                    <GridView.ItemsPanel>

                        <ItemsPanelTemplate>

                            <VirtualizingStackPanel Orientation="Horizontal"/>

                        </ItemsPanelTemplate>

                    </GridView.ItemsPanel>

                    <GridView.GroupStyle>

                        <GroupStyle>

                            <GroupStyle.HeaderTemplate>

                                <DataTemplate>

                                    <Grid Margin="20,0,0,0">

                                        <Button AutomationProperties.Name="Group Title"

                                                Content="{Binding CountryName}"

                                                Style="{StaticResource TextBlockButtonStyle}"

                                        />

                                    </Grid>

                                </DataTemplate>

                            </GroupStyle.HeaderTemplate>

                            <GroupStyle.Panel>

                                <ItemsPanelTemplate>

                                    <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,50,0" />

                                </ItemsPanelTemplate>

                            </GroupStyle.Panel>

                        </GroupStyle>

                    </GridView.GroupStyle>

                </GridView>

            </SemanticZoom.ZoomedOutView>

        </SemanticZoom>

    </Grid>

</Page>

DataTemplate

   <DataTemplate x:Key="Standard250x250ItemTemplate">

            <Grid Height="250" Width="250">

                <Grid.RowDefinitions>

                    <RowDefinition Height="190"/>

                    <RowDefinition Height="60"/>

                </Grid.RowDefinitions>

                <Border Background="{StaticResource ListViewItemCheckSelectingThemeBrush}" Grid.Row="0">

                    <Image Source="{Binding Image}" Stretch="UniformToFill" Margin="20"/>

                </Border>

                <StackPanel Grid.Row="1">

                    <TextBlock Text="{Binding FullName}" Margin="20"/>

                </StackPanel>

            </Grid>

        </DataTemplate>

        <DataTemplate x:Key="MinimumItemTemplate">

            <Grid Height="100" Width="100">

                <Grid.RowDefinitions>

                    <RowDefinition Height="80"/>

                    <RowDefinition Height="20"/>

                </Grid.RowDefinitions>

                <Border Background="{StaticResource ListViewItemCheckSelectingThemeBrush}" Grid.Row="0">

                    <Image Source="{Binding Image}" Stretch="UniformToFill" Margin="5"/>

                </Border>

                <StackPanel Grid.Row="1">

                    <TextBlock Text="{Binding FullName}" Margin="5"/>

                </StackPanel>

            </Grid>

        </DataTemplate>

Models

    public class Person

    {

        public string FullName { get; set; }

        public string Image { get; set; }

 

    }

    public class Country

    {

        public string CountryName { get; set; }

        public IList<Person> Persons { get; set; }

 

    }

 

Le service contient une méthode permettant de renvoyer une liste de pays , avec pour chaque quelques personnes .

 

ViewModel

public class CountryListViewModel 

    {

        public ObservableCollection<Country> Countries { get; set; }

 

        private CountryService countryService;

 

        public CountryListViewModel()

        {

            countryService = new CountryService();

            Countries = new ObservableCollection<Country>(countryService.All());

        }

    }

Et dans le code behind de la page il suffit de définir le DataContext

DataContext = new CountryListViewModel();

 

Pour dézoomer (ctrl + "-")

zoom1.png

 

Ressources

http://blog.loicrebours.fr/2012/05/13/developper-application-windows8-introduction/

http://www.jonathanantoine.com/2012/03/05/winjs-out-of-the-box-available-icons/


Repost 0
Published by Romagny13 - dans WinRT
commenter cet article
2 mai 2014 5 02 /05 /mai /2014 23:38

1-Présentation

  • « Fast and fluid » .Les  applications Windows Store doivent se concentrer sur le contenu, proposer une bonne expérience utilisateur(UX) et ne jamais être bloquées .

  • Snapping : on peut afficher  2 applications dans un écran partagé.L’une étant « Filled » et l’autre « Snapped »

  • Charms : (menu) supportent l’intégration avec Windows

  • App bar : barre pour les actions spécifiques de l’application

win81 

http://msdn.microsoft.com/fr-fr/windows/apps/br229512.aspx

Référence http://msdn.microsoft.com/fr-fr/library/windows/apps/br211377.aspx

Projets Windows Store : HTML/JavaScript/CSS ou XAML/C# C++ VB

Types de Projets Windows Store

  • Vide (Blank)

  • Grid si on a beaucoup de collections à afficher        

  • Split pour un scénario de vue Maitre détail

  • Visual Studio 2013 RC2 en ajoute des nouveaux dont les applications universelles qui devraient permettre de cibler avec une seule application Windows Phone et WinRT     

3 états d’application:

  • En cours (Running)

  • Suspendue (Suspended)

  • Finie (Terminated) .Par exemple l’application peut être fermée si windows a besoin de ressources .C’est pour cela qu’il faut veiller à sauvegarder l’état de son application au passage à l’état « suspendu »(on a 5 secondes maximum pour cela)

Controls  En plus des classiques boutons, checkbox, listView, listBox …

 win82.png

Appxmanifest : informations sur l’application, ses capacités, etc.     

win83

2- Hello World

Hello World HTML/JS 

http://msdn.microsoft.com/fr-fr/library/windows/apps/hh465493.aspx

Avec un projet vide Windows Store HTML/JS.On a :

  • La page html default.html

  • Le fichier JavaScript default.js

  • La feuille de style default.css

Dans la page html

<body>

    <label for="tbMessage">Message : </label>

    <input id="tbMessage" type="text" /><br/>

    <input id="btSubmit" type="button" value="submit" /><br />

    <span id="lbResult" />

</body>

 

Dans le fichier javascript

app.onloaded = function () {

 

        var bt = document.getElementById("btSubmit");

        bt.addEventListener("click", function () {

            var tb = document.getElementById("tbMessage");

            var lb = document.getElementById("lbResult");

            lb.innerHTML = tb.value;

        });

 

    }

Et dans la feuille de style

#lbResult {

   color:brown;

}

 

Hello World Xaml/C#

Avec un projet vide Windows Store Xaml/C# ,on a :

  • Mainpage.xaml

  • App.xaml

Mainpage

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

        <Grid.RowDefinitions>

            <RowDefinition Height="40"/>

            <RowDefinition Height="40"/>

            <RowDefinition Height="40"/>

            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="1*"/>

            <ColumnDefinition Width="3*"/>

        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0"  HorizontalAlignment="Left" Margin="10" Text="Message :"/>

        <TextBox Name="tb" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" Margin="10" />

        <Button Name="bt"  Grid.Column="1" Grid.Row="1" Content="OK" Click="bt_Click" />

        <TextBlock Name="lb" Grid.Column="1" Grid.Row="2" Style="{StaticResource resultStyle}" />

    </Grid>

Code behind

  public sealed partial class MainPage : Page

    {

        public MainPage()

        {

            this.InitializeComponent();

        }

 

        private void bt_Click(object sender, RoutedEventArgs e)

        {

            lb.Text = tb.Text;

        }

    }

Et on ajoute un style dans App.xaml (ou dans un dictionnaire de ressources, etc.)

<Application.Resources>

        <Style x:Key="resultStyle" TargetType="TextBlock">

            <Setter Property="Foreground" Value="Brown" />

        </Style>

</Application.Resources>

 

win84

 

WinJS

UI Surfaces

  • App bar

  • Message dialogs (ruban qui traverse la page ,exemple lorsqu’on clique sur un lien PDF)

  • Context menu

  • Flyout

  • Etc .

http://msdn.microsoft.com/en-us/library/windows/apps/br229782.aspx

Navigation

  • PageControlNavigator

  • Page Control (création fichiers *.js,*.css,*.html )

http://msdn.microsoft.com/fr-fr/library/windows/apps/hh452761.aspx

Controls

  • Utilise les controls HTML Standards

http://msdn.microsoft.com/fr-fr/library/windows/apps/hh465451.aspx        

http://www.w3schools.com/html/html_forms.asp

http://www.w3schools.com/html/html5_new_elements.asp

 

+data-win-control attribut pour <div> (exemple DatePicker)    

+ data-win-options    

Databind

Animation

http://msdn.microsoft.com/fr-fr/library/windows/apps/xaml/hh452701.aspx

Tile(tuile)

http://msdn.microsoft.com/fr-fr/library/windows/apps/hh761491.aspx

 

Repost 0
Published by Romagny13 - dans WinRT
commenter cet article
9 avril 2014 3 09 /04 /avril /2014 02:04

Gestionnaire de configurations > plateforme > x86 (ou x64)

 

Puis dans le gestionnaire de paquets NuGet :

  • chercher  SQLite for Windows Runtime
  •   puis SQLite.net

 

 

On peut créer la base et les tables en mode « Code First » un peu de la même manière qu’avec Entity Framework

(SQLite ne prend pas en charge les clés étrangères)


using SQLite ;


La classe métier qui sert de « schéma » pour la table .J’implémente INotifyPropertyChanged pour le binding


Les attributs appartiennent à l’espace de noms SQLite .Les attributs disponibles sont : 

  • TableAttribute 
  • ColumnAttribute 
  • PrimaryKeyAttribute 
  • AutoIncrementAttribute : colonne de clé primaire auto incrémentée. 
  • IndexedAttribute : colonne avec un index 
  • IgnoreAttribute : colonne ignorée lors de la création de la table 
  • UniqueAttribute : colonne avec valeurs uniques 
  • MaxLengthAttribute : taille maximale de la donnée d’une colonne 
  • CollationAttribute

 

Model

[Table("Client")]

    public class Client : ObservedBase

    {

 

        private int _clientID;

 

        [PrimaryKey]

        [AutoIncrement]

        [Column("ClientID")]

        public int ClientID

        {

            get { return _clientID; }

            set

            {

                _clientID = value;

                RaisePropertyChanged<int>(() => ClientID);

            }

        }

 

        private string _clientFullName;

 

        [MaxLength(100)]

        [Column("ClientFullName")]

        public string ClientFullName

        {

            get { return _clientFullName; }

            set

            {

                _clientFullName = value;

                RaisePropertyChanged<string>(() => ClientFullName);

            }

        }

 

        private string _email;

 

        [Column("Email")]

        public string Email

        {

            get { return _email; }

            set

            {

                _email = value;

                RaisePropertyChanged<string>(() => Email);

            }

        }

    }

 

ObservedBase

  public class ObservedBase :

        INotifyPropertyChanged

    {

        public ObservedBase() { }

 

        #region INotifyPropertyChanged Members

 

        public event PropertyChangedEventHandler PropertyChanged;

 

        protected void RaisePropertyChanged<T>(Expression<Func<T>> expression)

        {

 

            var memberExpression = expression.Body as MemberExpression;

            if (memberExpression != null)

            {

                string propertyName = memberExpression.Member.Name;

                RaisePropertyChanged(propertyName);

            }

        }

 

        private void RaisePropertyChanged(String propertyName)

        {

            PropertyChangedEventHandler handler = PropertyChanged;

            if (handler != null)

                handler(this, new PropertyChangedEventArgs(propertyName));

 

        }

 

        #endregion

    }

 

 

Dans Une classe ClientService implémentant une interface IClientService pour structurer un minimum son code .

Créer une base :la base est automatiquement crée dans le répertoire cible si elle n’existe pas .Il est conseillé d’appeler cette méthode le plus tôt possible (dès OnLaunched dans App.xaml.cs)

       private SQLiteAsyncConnection connection;

 

        public void GetConnection()

        {

            string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "dbDemo.sqlite");

            connection = new SQLiteAsyncConnection(path);

        }

 

Créer une table : on utilise la méthode CreateTableAsync<T>()  .Il existe également une méthode CreateTablesAsync() (pour supprimer une table on peut utiliser DropTableAsync<T>())

        public async Task CreateTableAsync()

        {

            await connection.CreateTableAsync<Client>();

        }

 

Récupérer les lignes

        public async Task<IList<Client>> GetAll()

        {

            return await connection.Table<Client>().ToListAsync();

        }

 

Récupérer un élément

public async Task<Client> GetOne()

        {

            GetConnection();

            return await connection.Table<Client>().FirstOrDefaultAsync();

        }

 

Insérer un ou plusieurs éléments

        public async Task AddClientsAsync()

        {

            List<Client> clients = new List<Client>(){ new Client(){ClientFullName="Bellin, Marie",Email="bellinmarie@live.com"},

                                                       new Client(){ClientFullName="Adams, Terry",Email="adams156@live.com"}

            };

 

            // await connexion.InsertAsync(client); // pour insérer un élément

            await connection.InsertAllAsync(clients); // pour insérer une collection

        }

 

Modifier un élément (il existe aussi UpdateAllAsync)

  public async Task<int> Remove(Client client)

        {

            GetConnection();

            return await connection.UpdateAsync(client);

        }

 

Supprimer un élément

        public async Task<int> Remove(Client client)

        {

            GetConnection();

            return await connection.DeleteAsync(client);

        }

 

 

Le code du ViewModel

public class ClientListViewModel :ObservedBase

    {

        private ObservableCollection<Client> _clients;

 

        public ObservableCollection<Client> Clients

        {

            get { return _clients; }

            set

            {

                _clients = value;

                RaisePropertyChanged<ObservableCollection<Client>>(() => Clients);

            }

        }

 

        private IClientService clientService;

 

        public ClientListViewModel()

        {

            clientService = new ClientService();

            GetItems();

        }

 

        public async void GetItems()

        {

            Clients = new ObservableCollection<Client>(await clientService.GetAll());

        } 

    }

 

Et MainPage

  <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

        <GridView ItemsSource="{Binding Clients}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

            <GridView.ItemTemplate>

                <DataTemplate>

                    <StackPanel Orientation="Horizontal">

                        <TextBlock Text="{Binding ClientID}" Width="100"/>

                        <TextBox Text="{Binding ClientFullName}" Width="150"/>

                        <TextBox Text="{Binding Email}" Width="200" />

                    </StackPanel>

                </DataTemplate>

            </GridView.ItemTemplate>

        </GridView>

    </Grid>

 

Dans le code behind simplement

this.DataContext = new ClientListViewModel();


 

sqliws1

Repost 0
Published by Romagny13 - dans WinRT
commenter cet article
8 avril 2014 2 08 /04 /avril /2014 01:17

SQLite Admin

http://sqliteadmin.orbmu2k.de/

SQLite Browser

http://sourceforge.net/projects/sqlitebrowser/

SQLite est un SGBR embarqué « léger » (ne supporte pas les clés étrangères).

Pour WinRT rechercher SQLite for Windows Runtime  sinon seulement SQLite dans les packagesNuGet

  

Il est possible de créer ses bases et tables un peu comme EDM en « code first » également

Exemple : crée la base si elle n’existe pas

SQLiteConnection connection = new SQLiteConnection(@"Data Source=C:\dbDemo.sqlite;");

connection.Open();

Il est possible de passer par DbConnection,DbCommand,etc. 

Avec WinRT On utilisera  SQLiteAsyncConnection et la méthode CreateTableAsync<T>() de la connexion .

Repost 0
Published by Romagny13 - dans WinRT
commenter cet article