C# – ViewModel com DataAnnotations em projetos Class Library

Olá, tudo bom?

Para que você possa decorar suas ViewModels com DataAnnotations em projetos Class Library, basta seguir os passos abaixo:

1) Fazer referência ao namespace System.ComponentModel.DataAnnotations

  • No projeto Class Library, botão direito sobre a pasta References e clique sobre a opção Add Reference…
  • Na tela Reference Manager, clique sobre a guia Framework, marque a opção System.ComponentModel.DataAnnotations e clique sobre o botão OK.

2) Adicionar o namespace System.ComponentModel.DataAnnotations na classe que servirá como ViewModel

  • Digite using System.ComponentModel.DataAnnotations na classe em questão

 

Abraços,
Eduardo Henrique Rizo (@eduardorizo)

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , ,

Tutorial: Hospedagem gratuita para aplicações ASP.NET

Olá pessoal, tudo bom?

O site GearHost oferece um plano gratuito para hospedagem de aplicações ASP.NET e bancos de dados baseados no SQL Server ou MySQL. O plano, por ser livre de pagamento, possui algumas limitações, porém é muito interessante para quem esteja precisando testar seus projetos em um ambiente real.

Segue um tutorial sobre como criar uma conta para hospedagem no GearHost e também como obter as informações necessárias para FTP dos seus arquivos.

1) Acesso ao site

  • O acesso ao site se dá pela URL http://www.gearhost.com
  • Nele é necessário que você crie uma conta para obter acesso aos recursos de hospedagem
  • Na próxima tela, informe seu endereço de e-mail e uma senha que deseja utilizar no GearHost
  • Você receberá um e-mail para que confirme seu cadastro

2) Acesso ao painel de controle

  • Na barra de menus do site GearHost, clique sobre a opção LOG IN
  • Na próxima tela, informe o endereço do seu e-mail e a senha que indicou no momento do seu cadastro. Caso esteja tudo correto, você terá acesso ao painel de controle para que faça os procedimentos de preparação para a hospedagem do seu site

3) Criar um espaço para hospedagem

  • Para hospedar um site é necessário que você adicione um recurso que o GearHost chama de CloudSite. O nome que você der para o CloudSite será o nome que você irá utilizar para acessar o seu site hospedado, por exemplo, http://ehrizo.gear.host, onde “ehrizo” foi o nome dado para um determinado CloudSite;
  • Após criar o recurso de CloudSite, clique sobre o nome dele para visualizar os detalhes correspondentes ao mesmo, como por exemplo, capacidade de hospedagem, logs de acesso, configurações de FTP, etc;
  • Clique sobre o botão Publish para visualizar os dados para acesso ao FTP do seu CloudSite. Como dica, sugiro que utilize o cliente de FTP FileZilla para enviar seus arquivos ao servidor do GearHost;
  • Após publicar seus arquivos, acesse-os através da URL http://nome_do_cloudsite.gear.host/seu_arquivo

4) Criar Bancos de Dados

  • Caso precise de um banco de dados SQL Server ou MySQL, basta utilizar o menu Databases e escolher dentre as opções disponíveis
  • Na imagem abaixo, é possível observar duas bases de dados já criadas.
  • Após criar os bancos de dados, clique sobre o nome dele para poder visualizar os dados e configurações para conexão ao mesmo.

5) Exemplo de publicação em vídeo

 

Espero ter ajudado !

Abraços,
Eduardo Henrique Rizo (@eduardorizo)

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

 

Marcado com: , , , , , ,

Benefícios gratuitos para desenvolvedores – Visual Studio Dev Essentials

O Visual Studio Dev Essentials é um programa que disponibiliza uma série de ferramentas, serviços de nuvens e treinamentos gratuitos para quem é desenvolvedor e quiser se inscrever como participante.

Os benefícios disponíveis para os participantes são:

  • Crédito Azure (US$ 25/mês por 12 meses)*
  • Conta do Visual Studio Team Services com cinco usuários*
  • Pluralsight (assinatura de 3 meses)*
  • Cursos selecionados do Xamarin University sob demanda*
  • WintellectNOW (assinatura de três meses)*
  • Prioridade de suporte no fórum*
  • SQL Server Developer Edition*
  • Windows R Server*
  • Parallels Desktop® for Mac Pro Edition (assinatura de três meses)*
  • Parallels® Access (assinatura de 3 meses)*
  • VM na Plataforma Windows (60 dias)

* Benefícios exclusivos disponíveis somente por meio do programa Visual Studio Dev Essentials.

Visite a página do programa e faça sua inscrição.

Abraços,
Eduardo Henrique Rizo

MCP

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

 

Marcado com: , , , , , , , , , ,

Universal APPs: Facilite sua vida com o UWP Community Toolkit

O UWP Community Toolkit é um kit de ferramentas da comunidade UWP com uma coleção de funções auxiliares, controles personalizados e serviços de aplicativo. Sua proposta é simplificar e demonstrar como realizar tarefas comuns para criar aplicativos UWP para o Windows 10.

uwp-community-toolkit

O vídeo abaixo apresenta uma visão geral sobre o UWP Toolkit:

Ficou interessado?

Github

Caso você queira colocar a “mão na massa” e contribuir com a comunidade que mantem o UWP Community Toolkit, acesse sua página no Github e vá em frente…

Fontes:

Abraços,
Eduardo Henrique Rizo

MCP

Post Relacionado: 

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , , , , , , ,

Como resolver as dependências de CSS e jQuery do Ntop no Debian/Ubuntu

Olá, tudo bom?

Caso você tenha instalado o Ntop no Debian/Ubuntu e esteja tendo dificuldades para fazer ele exibir os gráficos corretamente, saiba que para resolver a situação, o procedimento é bastante simples.

Execute o comando abaixo para instalar/atualizar as dependências faltantes.


# apt-get install libjs-jquery libjs-jquery-ui

Abraços,
Eduardo Henrique Rizo

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , ,

UWP: Aprenda a criar APPs para Windows 10

Olá, tudo bom?

learning

Sempre me perguntam sobre como aprender a desenvolver APPs para Windows 10 (Universal APPs / UWP). A resposta geralmente indica a leitura de livros, cursos online, blogs especializados, etc. No entanto, para facilitar ainda mais, seguem algumas fontes iniciais:

Microsoft Virtual Academy
Syncfusion Free Ebooks
C# Corner
Linkedin SlideShare

Agora é só tomar folego e começar a estudar para criar suas primeiras APPs.

Abraços,
Eduardo Henrique Rizo

MCP

Post Relacionado: 

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , , , , , , , , ,

Universal APPs: Navegação entre páginas

Olá pessoal, tudo bom?

Este é um post básico para quem está iniciando o desenvolvimento de aplicações universais (UWP) e gostaria de saber como proceder a navegação (ligação) entre uma página e outra.

Navegando da página 1 para a página 2

Navegando da página 1 para a página 2

Exemplo 1: Navegação simples

Suponha que você tenha em seu projeto a Pagina1.xaml e a Pagina2.xaml. Na página 1 você tem um botão que ao ser tocado dispara um evento para chamar a página 2. Vejamos:

Trecho de código XAML para definição do botão

...
<Button Name="btnNavegar1" Content="Chamar página 2" Click="btnNavegar1_Click" />
...

Trecho de código em C# que irá “chamar” a página 2


private void btnNavegar1_Click(object sender, RoutedEventArgs e)
{
   Frame.Navigate(typeof(Pagina2));
}

Exemplo 2: Navegação com passagem de parâmetros

Tomando por base o exemplo 1, agora queremos chamar a página 2 passando a ela um conjunto de valores que deverão ser recepcionados para utilização futura, ou seja, a página 1 irá enviar valores que serão utilizados pela página 2.

Trecho de código XAML para definição do botão

...
<Button Name="btnNavegar1" Content="Chamar página 2" Click="btnNavegar1_Click" />
...

Trecho de código em C# que irá “chamar” a página 2


private void btnNavegar1_Click(object sender, RoutedEventArgs e)
{
   List<string> valores = new List<string>
   {
      "Valor 1",
      "Valor 2",
      "Valor 3",
      "Valor 4"
   };
   Frame.Navigate(typeof(Pagina2), valores);
}

Repare que o método Navigate além de chamar a classe Pagina2, também envia por parâmetro a lista de strings valores.

Vale ressaltar que é possível passar quaisquer tipos de objetos como parâmetro.

Na página 2 (Pagina2.xaml.cs) devemos recepcionar o(s) parâmetro(s) através do método OnNavigatedTo. Veja o exemplo abaixo:


protected override void OnNavigatedTo(NavigationEventArgs e)
{
  this.navigationHelper.OnNavigatedTo(e);

  //Todo parâmetro chega pelo argumento e
  //Você o recepciona e converte para o tipo de origem do parâmetro
  
  List<string> dados = e.Parameter as List<string>;
  
  //Fazer o restante de sua implementação aqui...
  //...
  //...
}

Espero ter ajudado.

Abraços,

Eduardo Henrique Rizo

MCP

Post Relacionado: 

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , , , , , , , , , ,

Consulta LINQ com Group by

Olá, tudo bom?

Caso você esteja precisando fazer alguma consulta LINQ com group by, segue um modelo de classes para teste e alguns exemplos para ajudar.

Modelo de Classes para um Sistema Fictício de Help Desk

Modelo de Classes para um Sistema Fictício de Help Desk

Exemplo 1: Obtendo a quantidade de atividades de um determinado funcionário e agrupando por tipo de status


from a in Atividade
     where a.CodigoFuncionario == 1
     group a by new { a.Status.Descricao } into g
     select new {
            Status = g.Key.Descricao,
            Quantidade = g.Count()
     }

Exemplo 2: As 5 pessoas (solicitantes) que mais solicitam atividades


(from a in Atividade
      where a.CodigoFuncionario == 1
      group a by new { a.Solicitante.Nome } into g
      select new {
             Nome = g.Key.Nome,
             Quantidade = g.Count()
      }).OrderByDescending(x => x.Quantidade).Take(5)

Exemplo 3: As 5 classificações que mais possuem atividades associadas

(from a in Atividade
 from c in a.Classificacoes
      where a.CodigoFuncionario == 2
      group c by new { c.Nome } into g
           select new {
                  Nome = g.Key.Nome,
                  Quantidade = g.Count()
           }).OrderByDescending(x => x.Quantidade).Take(5)

Abraços,

Eduardo H. Rizo (@eduardorizo)

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Post relacionado: LINQ: Exemplo de consulta com group by e sum

Marcado com: , , , , , , ,

Scrum com Trello

Olá, tudo bom?

Fonte: http://www.mindmaster.com.br/scrum-com-trello/

Fonte: http://www.mindmaster.com.br/scrum-com-trello/

Para quem está procurando uma ferramenta para ajudar na gestão dos seus processos de software, segue uma dica da empresa MindMaster, onde se demonstra o uso do Scrum sobre a ferramenta Trello.

Para acessar o texto na íntegra, clique aqui.

Grande abraço.

Eduardo H. Rizo

Marcado com: , , ,

Universal APPs: Criar menu no estilo Hambuger através da classe SplitView

A classe SplitView representa um container com duas visões, sendo uma para o conteúdo principal (Content) e outra geralmente utilizada para comandos de navegação (Pane).
Um dos usos comuns para o SplitView é a criação de menus hambuger, conforme ilustra a imagem abaixo, porém como ele não tem uma guideline específica então, enquanto DEVs, ficamos livres para criar outras possibilidades de interface utilizando o mesmo componente.
Menu hamburger
As propriedades do SplitView permite que o mesmo tenha diferentes tipos de comportamentos em relação à sua forma de apresentação, por exemplo, ele pode ficar sobre o conteúdo principal, pode empurrar o conteúdo principal no momento de sua abertura, pode ficar sempre visível ou não, etc.
O código XAML abaixo demonstra o básico sobre o SplitView:

<SplitView IsPaneOpen="True" DisplayMode="Inline" OpenPaneLength="250">
    <SplitView.Pane>
        <TextBlock Text="Pane" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </SplitView.Pane>

    <SplitView.Content>
       <Grid>
           <TextBlock Text="Content" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center"/>
       </Grid>
    </SplitView.Content>
</SplitView>

Ainda sobre características do SplitView, é possível que você especifique se o painel de navegação (Pane) será aberto à esquerda ou à direita. Exemplo:

Nesse ponto da leitura você já deve ter entendido a função da classe SplitView, sendo assim, apresento um trecho de código XAML que pode servir de base para quem deseja utilizar esse componente para montar em sua APP um menu de navegação no estilo hamburger.

<Page x:Class="UnoesteUWP.HamburgerMenu" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:UnoesteUWP" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">

    <Grid>
	    <!-- Divisão da página em duas linhas (topo e restante da tela) -->
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
		<!-- Definição do topo -->
        <StackPanel Height="50" Background="Green" Orientation="Horizontal">
		    <!-- Botão que irá abrir o painel para exibir o menu hambuger -->
            <Button x:Name="btnHamburger" FontFamily="Segoe MDL2 Assets" Content="&amp;#xE700;" Width="50" Height="50" Grid.Row="0" Background="Transparent" Click="btnHamburger_Click" />
            <TextBlock Style="{StaticResource TitleTextBlockStyle}" Foreground="White" Height="50" VerticalAlignment="Center" Text="Hamburger Menu" />
        </StackPanel>
		<!-- Definição do SplitView -->
        <SplitView Name="meuSplitView" DisplayMode="Overlay" IsPaneOpen="False" FlowDirection="LeftToRight" RequestedTheme="Dark" CompactPaneLength="50" OpenPaneLength="250" Grid.Row="1">
			<!-- Painel de navegação -->
            <SplitView.Pane>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <StackPanel Grid.Row="1">
                        <StackPanel Orientation="Horizontal">
                            <Button Name="btnMenu1" FontFamily="Segoe MDL2 Assets" Content="&amp;#xE825;" Width="50" Height="50" Background="Transparent"/>
                            <TextBlock Text="Button 1" FontSize="18" VerticalAlignment="Center" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Button Name="btnMenu2" FontFamily="Segoe MDL2 Assets" Content="&amp;#xE10F;" Width="50" Height="50" Background="Transparent"/>
                            <TextBlock Text="Button 2" FontSize="18" VerticalAlignment="Center" />
                        </StackPanel>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Grid.Row="2">
                        <Button Name="btnMenu3" FontFamily="Segoe MDL2 Assets" Content="&amp;#xE1D6;" Width="50" Height="50" Background="Transparent"/>
                        <TextBlock Text="Button 3" FontSize="18" VerticalAlignment="Center" />
                    </StackPanel>
                </Grid>
            </SplitView.Pane>
			<!-- Painel de conteúdo -->
            <SplitView.Content>
                <Grid Background="Black">
                    <TextBlock Name="txtConteudo" Text="Conteúdo da APP..." Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="54"/>
                </Grid>
            </SplitView.Content>
        </SplitView>
    </Grid>
</Page>

Implementação do clique do botão btnHamburger

...
private void btnHamburger_Click(object sender, RoutedEventArgs e)
{
    meuSplitView.IsPaneOpen = !meuSplitView.IsPaneOpen;
}
...

imagem4

Abraços,

Eduardo Henrique Rizo

MCP

Fonte: http://blog.jerrynixon.com/2015/04/implementing-hamburger-button-with.html

Post Relacionado: 

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

Marcado com: , , , , , , , , , , , , ,
Top