none
Binding num TextBlock RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Alguém pode me enviar um exemplo simples de como enviar o nome do usuario (a parte de acesso ao banco eu não tenho problema)

    para um "TextBlock" que está na que está na "MainPage.xaml".

    exemplo.: Estou em uma Page (Silverligth) e quando o usuario digita seu login e senha (se for válido)

                    eu preciso enviar o seu nome para um TextBlock que está na MainPage.

                    estou fazendo um binding (configurado no TextBlock), mais nada acontece.

    Valeu. 

    quinta-feira, 1 de novembro de 2012 19:33

Respostas

  • Boa Tarde  Otoni,

    Do jeito que eu fiz, quando foi feito o login, a MainPage ainda não estava carregada e por isso funcionou. Se você estiver utilizando o login na Main também, este jeito não vai funcionar, poir o StaticResource não tem um "listener" para verificar se a propriedade foi alterada.

    Para funcionar teria de utilizar um markup de binding chamado Static que somente funciona no WPF. Mesmo no silverlight 5 esta funcionalidade não é nativa, mas você pode montar esse markup.

    Segue um exemplo:

    http://slouge.wordpress.com/2011/04/20/silverlight-x-static-markupextension-like-wpf/

    Existe também a possibilidade de criar um TextBlock estatico e adicionar ele via código em um container:

       public partial class MainPage : UserControl
       {
          public MainPage()
          {
             InitializeComponent();
    
             LayoutRoot.Children.Add(TUsuarios.LabelLogin);
          }
       }

    Assim sem binding:

       public sealed class TUsuarios
       {
          private static string _nomeLogin;
          public static string nomeLogin
          {
             get { return _nomeLogin; }
             set
             {
                _nomeLogin = value;
                LabelLogin.Text = value;
             }
          }
    
          private static TextBlock labelLogin;
    
          public static TextBlock LabelLogin
          {
             get
             {
                if (labelLogin == null)
                   labelLogin = new TextBlock();
    
                labelLogin.Text = nomeLogin;
    
                return labelLogin;
             }
          }
       }
    

    Se tiver utilizando o Silverlight 5, vale a pena tentar o exemplo.

    Espero que ajude,

    Atenciosamente,



    Samuel Fabel

    • Marcado como Resposta Otoni terça-feira, 6 de novembro de 2012 13:01
    segunda-feira, 5 de novembro de 2012 20:04
  • Boa noite Otoni,

    Existe um template do silverlight chamado Silverlight Business Application. Esse template tem toda uma estrutura de loggin e segurança. Dê uma olhada. É bem interessante.

    Espero que ajude,

    Atenciosamente,


    Samuel Fabel

    • Marcado como Resposta Otoni terça-feira, 6 de novembro de 2012 13:05
    segunda-feira, 5 de novembro de 2012 22:17

Todas as Respostas

  • Boa tarde Otoni,

    Tenta fazer um binding a uma propriedade estatica. Nesse link tem um exemplo de como isso funciona:

    http://blogs.msdn.com/b/yl/archive/2009/07/22/x-type-and-x-static-in-silverlight.aspx

    Espero que ajude,

    Atenciosamente,


    Samuel Fabel

    sexta-feira, 2 de novembro de 2012 14:22
  • Ola Samuel,

    Valeu pela atenção... mas confesso q/ não entendi (desculpe minha ignorância)

    estou começando agora.

    O que quero fazer.?

       a) usuario faz o login numa Page.xaml própria.

       b) atraves de um serviço busco os dados do usuario no mysql

       c) caso o usuario exista ???

    ------ate aqui tudo bem---------------------------------------------------

       d) quero enviar o nome do usuario para um TextBlock existente na MainPage (Silverlight 5).

       Alguém tem um exemplo simples????

      Valeu pessoal.

    sábado, 3 de novembro de 2012 16:53
  • Boa Noite Otoni,

    Desculpa ter demorado responder antes. Segue um exemplo:

    No exemplo que eu montei, utilizei o Silverlight Navigation Application, mas isso é irrelevante.

    Vamos supor que o login ou nome do usuário logado que vai ficar na MainPage fique numa classe assim:

    namespace SilverlightApplication2
    {
        public sealed class UsuarioLogado
        {
            public static string Login { get; set; }
        }
    }

    O primeiro passo para o binding é referenciar em algum lugar do xaml. No caso estarei colocando do xaml do App que pode ser vizualizado de qualquer xaml:

    <Application   
      x:Class="SilverlightApplication2.App"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SilverlightApplication2">
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Assets/Styles.xaml"/>
                </ResourceDictionary.MergedDictionaries>
                <local:UsuarioLogado x:Key="MeuUsuario" />
            </ResourceDictionary>
        </Application.Resources>
    </Application>

    Depois disso, você só precisa referenciar a propriedade no TextBlock:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
        </Grid.ColumnDefinitions>
        <TextBlock Text="Usuário Logado:" Foreground="White" VerticalAlignment="Center" />
        <TextBlock Text="{Binding Path=Login, Source={StaticResource MeuUsuario}}" Foreground="White" Grid.Column="1" />
    </Grid>

    Para atribuir valor a propriedade basta passa valor como qualquer propriedade estatica:

    UsuarioLogado.Login = loginTextBox.Text;

    Espero que ajude,

    Atenciosamente,


    Samuel Fabel

    segunda-feira, 5 de novembro de 2012 00:30
  • Caro Samuel,

    Quero agradecer pela sua atenção.  ( tem alguma coisa errada no meu código , só não consigo ver onde está o erro, porque não funciona)

    Minha Classe

    namespace SLSVan
    {
        public sealed class TUsuarios
        {
            
          //  [Display (Name="Usuario")]
            public static string nomeLogin  { get;set;}
       
        }
    }
    

    o xaml do meu APP

    <Application   
      x:Class="SLSVan.App"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="clr-namespace:SLSVan">
      <Application.Resources>
        <ResourceDictionary>
          <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Assets/Styles.xaml"/>
          </ResourceDictionary.MergedDictionaries>
               <local:TUsuarios x:Key="UsuarioAtivo"/>
            </ResourceDictionary>
      </Application.Resources>
    
    </Application>

    e por fim meu TextBlock quee esta na MainPage

        <Grid x:Name="gridusu" Background="#FF5794DE" Margin="0,42,0,0" Height="19" VerticalAlignment="Top"  >
               <TextBlock Text="Usuário Logado.: "  />
                <TextBlock Name="txtbemvindo" Text="{Binding Path=nomeLogin, Source={StaticResource UsuarioAtivo }}" Grid.Column="1"  />
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="149*"/>
                   <ColumnDefinition Width="171*"/>
                </Grid.ColumnDefinitions>
            </Grid>

    estou atribuindo os dados que vem de um serviço

            private void btnentrar_Click(object sender, RoutedEventArgs e)
            {
                Service1Client client = new Service1Client();
                client.BuscaUsuCompleted += new EventHandler<BuscaUsuCompletedEventArgs>(client_BuscaUsu);
                client.BuscaUsuAsync(txtlogin.Text,txtsenha.Password);
            }
     
        void client_BuscaUsu (object sender, BuscaUsuCompletedEventArgs e)
        {
    
           
            if (e.Result.Count > 0)
            {
                
               
                string nome = ((TUsuario)e.Result[0]).nome_usu.ToString();
                if (!nome.Equals(null))
                {
                   TUsuarios.nomeLogin = e.Result[0].nome_usu.ToString(); 
    
              
                    
    
    
                }

    Me parece que está tudo certo, porque o código é quase uma cópia de seu exemplo, porem não funciona,

    me dê uma força aí.

    Valeu

    Otoni

    segunda-feira, 5 de novembro de 2012 17:58
  • Boa Tarde  Otoni,

    Do jeito que eu fiz, quando foi feito o login, a MainPage ainda não estava carregada e por isso funcionou. Se você estiver utilizando o login na Main também, este jeito não vai funcionar, poir o StaticResource não tem um "listener" para verificar se a propriedade foi alterada.

    Para funcionar teria de utilizar um markup de binding chamado Static que somente funciona no WPF. Mesmo no silverlight 5 esta funcionalidade não é nativa, mas você pode montar esse markup.

    Segue um exemplo:

    http://slouge.wordpress.com/2011/04/20/silverlight-x-static-markupextension-like-wpf/

    Existe também a possibilidade de criar um TextBlock estatico e adicionar ele via código em um container:

       public partial class MainPage : UserControl
       {
          public MainPage()
          {
             InitializeComponent();
    
             LayoutRoot.Children.Add(TUsuarios.LabelLogin);
          }
       }

    Assim sem binding:

       public sealed class TUsuarios
       {
          private static string _nomeLogin;
          public static string nomeLogin
          {
             get { return _nomeLogin; }
             set
             {
                _nomeLogin = value;
                LabelLogin.Text = value;
             }
          }
    
          private static TextBlock labelLogin;
    
          public static TextBlock LabelLogin
          {
             get
             {
                if (labelLogin == null)
                   labelLogin = new TextBlock();
    
                labelLogin.Text = nomeLogin;
    
                return labelLogin;
             }
          }
       }
    

    Se tiver utilizando o Silverlight 5, vale a pena tentar o exemplo.

    Espero que ajude,

    Atenciosamente,



    Samuel Fabel

    • Marcado como Resposta Otoni terça-feira, 6 de novembro de 2012 13:01
    segunda-feira, 5 de novembro de 2012 20:04
  • Boa noite Otoni,

    Existe um template do silverlight chamado Silverlight Business Application. Esse template tem toda uma estrutura de loggin e segurança. Dê uma olhada. É bem interessante.

    Espero que ajude,

    Atenciosamente,


    Samuel Fabel

    • Marcado como Resposta Otoni terça-feira, 6 de novembro de 2012 13:05
    segunda-feira, 5 de novembro de 2012 22:17
  • Grande Samuel,

    Obrigado pela paciencia e ajuda.

    consegui resolver o problema com este seu exemplo, era isto mesmo que eu queria. valeu.

    Como te disse no inicio estou começando com o Silverlight ,estou sem material para estudo. alguma sugestão

    de algum material em portugues.

    Mais uma vez, obrigado.

    terça-feira, 6 de novembro de 2012 13:05
  • Boa Tarde Otoni,

    Segue um link do próprio msdn com uma introdução ao Silverlight. Dei uma olhada no material e aparentemente é bem simples de se entender:

    http://msdn.microsoft.com/pt-br/library/cc580591.aspx

    Espero que ajude,

    Atenciosamente,


    Samuel Fabel

    terça-feira, 6 de novembro de 2012 14:35