none
Globalização Aplicação Silverligth RRS feed

  • Pergunta

  • Prezados

    Estamos implementando recurso de GLOBALIZAÇÃO em nossa aplicação; já conseguimos evoluir bastante porém estamos com um problema para carregar a cultura através do botão da bandeira do país. Vejam abaixo:




    Através do combobox consigo fazer a atualização de forma dinâmica através do método OnPropertyChanged(string name)

    public class MainPageViewModel : CurrentChangingEventArgs, INotifyPropertyChanged
            {
                public MainPageViewModel()
                {
                    Recursos = new conteudo();
                    Cultura = Culturas.FirstOrDefault();
                }
    
                public conteudo Recursos { get; private set; }
    
                public DateTime Hoje
                {
                    get { return DateTime.Now; }
                }
    
                private CultureInfo[] _culturas = new CultureInfo[] { 
                new CultureInfo("pt"),
                new CultureInfo("en"),
                new CultureInfo("es")
            };
                public CultureInfo[] Culturas
                {
                    get { return _culturas; }
                }
    
                public XmlLanguage Language { get; private set; }
    
                private CultureInfo _cultura;
                public CultureInfo Cultura
                {
                    get { return _cultura; }
                    set
                    {
                        if (value != _cultura)
                        {
                            _cultura = Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = value;
                            Language = XmlLanguage.GetLanguage("Cultura");
                            OnPropertyChanged("Cultura");
                            OnPropertyChanged("Language");
                            OnPropertyChanged("Hoje");
                            OnPropertyChanged("Recursos");
                        }
                    }
                }
    
                public void OnPropertyChanged(string name)
                {
                    var temp = PropertyChanged;
                    if (temp != null)
                    {
                        temp(this, new PropertyChangedEventArgs(name));
                    }
                }
    
                public event PropertyChangedEventHandler PropertyChanged;
            }

    Em meu XAML,  tenho no combobox o seguinte:

    <ComboBox Height="23" HorizontalAlignment="Left" Margin="5,2,0,0" Name="culturaComboBox" VerticalAlignment="Top" Width="174"
                      DisplayMemberPath="DisplayName"
                      ItemsSource="{Binding Culturas}"
                      SelectedItem="{Binding Cultura, Mode=TwoWay}" />

    O XAML do botão da bandeira da Espanha contém:

    <Button Height="23" HorizontalAlignment="Left" Margin="564,1,0,0" Name="cultureEspanholButton" VerticalAlignment="Top" Width="23" />
    Como fazer com que através do clique do botão, consiga a atualização do arquivo de recurso de forma automática NO CLICK DO BOTÃO como na alteração do conteúdo do COMBOBOX?


    Agradeço desde já atenção dos colegas!!!


    Eduardo Agostinho Analista Programador - C# Developer

    quarta-feira, 8 de agosto de 2012 19:50

Respostas

  • Ola Eduardo,

       Na verdade, como você esta usando o padrao MVVM, não é no Click do Botão que voce vai fazer essa implementação, mas sim vai executar um Command dentro do viewmodel...

       Fica algo assim:

       
        public class MainPageViewModel : CurrentChangingEventArgs, INotifyPropertyChanged {
            [...]
    
            public ICommand DefinirCultura { get { return new SimpleCommand(OnDefinirCultura); } }
    
            public void OnDefinirCultura(object paramenter) {
                if (paramenter is string) {
                    var idioma = (paramenter as string);
                    this.Cultura = new CultureInfo(idioma);
                }
            }
    
            [...]
        }

    Para simplificar a implatação da interface ICommand eu usei essa classe:

        public class SimpleCommand : ICommand {
            private readonly Action<object> execute;
    
            public SimpleCommand(Action<object> execute) {
                this.execute = execute;
            }
    
            public event EventHandler CanExecuteChanged;
    
            public bool CanExecute(object parameter) {
                return true;
            }
           
            public void Execute(object parameter) {
                if (this.execute != null) execute(parameter);   
            }
        }

    Ai no seu XAML basta definir o Commando aos botoes com o parametro do idioma:

    <Button [...] Name="cultureEspanholButton" Command="{Binding Path=DefinirCultura}" CommandParameter="es" />
    <Button [...] Name="cultureBrasilButton" Command="{Binding Path=DefinirCultura}" CommandParameter="pt" />


    sexta-feira, 17 de agosto de 2012 15:50
    Moderador