none
MultiBinding no Windows Phone 7 RRS feed

  • Pergunta

  • Como é possivel passar dois parametros por um evento em um botão, usando MVVM no Windows Phone 7. Notei que ele não aceita o MultiBinding. Alguém já fez isso? 

    Pois tenho um botão e preciso passar dois parametros de uma TextBox e um PasswordBox para um método, mas acabei entrando nessa dúvida.

     

    Att.

    Weber

    domingo, 8 de janeiro de 2012 04:21

Respostas

  • Olá Weber,

    Sempre achei MultiBinding meio desnecessário quando se trabalha com MVVM.

    Faça o seguinte:

    Coloque  os bindings dos seus dois campos (login e senha) como TwoWay.

    <StackPanel>
    	<TextBlock Text="{Binding Username, Mode=TwoWay}" />
    	<PasswordBox Password="{Binding Password, Mode=TwoWay}" />
    	<Button Content="Logar" Command="{Binding EfetueLoginCommand}" />
    </StackPanel>
    


    Agora, toda vez que alguém atualizar os campos, o binding em TwoWay vai atualizar a propriedade correspondente no seu ViewModel.

    Daí fica fácil, basta você chamar o command (nem precisa passar parâmetro) e lá dentro efetuar o login. Ex:

    public class EfetueLoginCommand : ICommand {
    	private LoginViewModel _loginViewModel;
    	private ILoginService _loginService;
    
    	public EfetueLoginCommand(LoginViewModel loginViewModel, ILoginService loginService) {
    		_loginViewModel = loginViewModel;
    		_loginService = loginService;
    	}
    
    	public void Execute(object parameter) {
    		if(_loginService.EfetueLogin(_loginViewModel.Username, _loginViewModel.Password)) {
    			...
    		}
    	}
    	...
    }
    

    Qualquer dúvida é só falar.

    []'s!

     

     


    - André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com
    • Marcado como Resposta Weber D. Amaral quarta-feira, 11 de janeiro de 2012 14:15
    terça-feira, 10 de janeiro de 2012 13:12
    Moderador

Todas as Respostas

  • Nativamente não existe suporte no Windows Phone para o MultiBinding (aliás, que eu saiba nem mesmo Silverlight 5 tem isso implementado!), no entanto encontrei alguns posts no AppHub Forum que falam sobre alternativas, entre elas encontrei esta que apesar de não a ter testado, me parece viável:

    http://blog.mecum.biz/2011/12/windows-phone-7-mango-and-xaml-multibinding-a-solution/


    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    • Sugerido como Resposta Pedro LamasMVP domingo, 8 de janeiro de 2012 18:34
    domingo, 8 de janeiro de 2012 18:34
  • Olá Weber,

    Sempre achei MultiBinding meio desnecessário quando se trabalha com MVVM.

    Faça o seguinte:

    Coloque  os bindings dos seus dois campos (login e senha) como TwoWay.

    <StackPanel>
    	<TextBlock Text="{Binding Username, Mode=TwoWay}" />
    	<PasswordBox Password="{Binding Password, Mode=TwoWay}" />
    	<Button Content="Logar" Command="{Binding EfetueLoginCommand}" />
    </StackPanel>
    


    Agora, toda vez que alguém atualizar os campos, o binding em TwoWay vai atualizar a propriedade correspondente no seu ViewModel.

    Daí fica fácil, basta você chamar o command (nem precisa passar parâmetro) e lá dentro efetuar o login. Ex:

    public class EfetueLoginCommand : ICommand {
    	private LoginViewModel _loginViewModel;
    	private ILoginService _loginService;
    
    	public EfetueLoginCommand(LoginViewModel loginViewModel, ILoginService loginService) {
    		_loginViewModel = loginViewModel;
    		_loginService = loginService;
    	}
    
    	public void Execute(object parameter) {
    		if(_loginService.EfetueLogin(_loginViewModel.Username, _loginViewModel.Password)) {
    			...
    		}
    	}
    	...
    }
    

    Qualquer dúvida é só falar.

    []'s!

     

     


    - André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com
    • Marcado como Resposta Weber D. Amaral quarta-feira, 11 de janeiro de 2012 14:15
    terça-feira, 10 de janeiro de 2012 13:12
    Moderador
  • Valeu André, deu certinho aqui.

     

    Muito obrigado.

    []s.

    quarta-feira, 11 de janeiro de 2012 14:15