Usuário com melhor resposta
Globalização Aplicação Silverligth

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
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" />
- Editado Rui SantosModerator sexta-feira, 17 de agosto de 2012 15:52
- Marcado como Resposta EAgostinho segunda-feira, 20 de agosto de 2012 13:23