Usuário com melhor resposta
Notificações entre janelas

Pergunta
-
Bom dia,
uma ajuda por favor.
Atualmente quando eu preciso que uma janela passe informações para outra, eu executo o método ShowDialog e com isso consigo interagir com as propriedades.
Existe algum outro método de uma janela notificar a outra durante uma pesquisa, por exemplo, uma janela chama outra onde aparece uma lista de produtos e ao clicar no produto desejado a janela de destino notifica a de origem.
Isso existe no Xamarin Forms (MessengerCenter)
Obrigado
Ricardo S. Pulini
Respostas
-
Bom dia Ricardo,
Tudo certo?
Para começarmos, por favor, nos informe qual a linguagem que está utilizando? C# ou VB.NET?
Existem varias maneiras de fazer isso. Uma que eu utilizaria, seria o padrão Singleton. Uma classe estática, com uma propriedade estática. Essa propriedade seria de um tipo de classe contendo propriedades que possam ser linkadas com DataBinding por qualquer janela e também poderiam ser atualizadas de qualquer parte do código.
Vou deixar um exemplo de uma Classe Singleton de fácil implementação:
public class Classe_Singleton : NotifyPropertyChanged { #region Singleton private static Classe_Singleton _Singleton; public static Classe_Singleton Singleton { get { if (_Singleton == null) _Singleton = new Classe_Singleton(); return _Singleton; } } private string _Propriedade; public string Propriedade { get { return _Propriedade; } set { _Propriedade = value; OnPropertyChanged("Propriedade"); OnFazerAlgumaCoisa(); } } public event EventHandler FazerAlgumaCoisa; protected virtual void OnFazerAlgumaCoisa() { FazerAlgumaCoisa?.Invoke(this, new EventArgs()); } #endregion } public class NotifyPropertyChanged : System.ComponentModel.INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string PropertyName) { if (!string.IsNullOrWhiteSpace(PropertyName)) PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } }
A propriedade chamada "Propriedade" pode ser facilmente linkada em com DataBinding no XAML em qualquer janela ou controle da sua aplicação, para monitorar. Se alguma parte do código alterar o valor da propriedade, o Controle ou Janela linkado responderá imediatamente. Você ainda tem a possibilidade de criar eventos, nos quais você pode acompanhar mudanças no code behind da sua aplicação.
Esse padrão Singleton que estou te apresentando é válido no Xamarin também! É muito utilizado em conjunto com o padrão MVVM.
Abaixo, uma maneira de você acompanhar mudanças na propriedade via código, usando o evento implementado na classe:
namespace WpfApp_Csharp { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Classe_Singleton.Singleton.FazerAlgumaCoisa += (object sender, EventArgs e) => { ///Código aqui quando a propriedade for alterada. }; } } }
Não é algo complexo, mas é um dos padrões mais utilizados na programação. Definitivamente, muito útil. Vou deixar alguns links de apoio para você dar uma lida e entender melhor a ideia em si:
MVVM STARTER PACK – INICIANDO NO MVVM – C#
Singleton - Padrão de Projeto com Microsoft .NET C Sharp
Implementando as Interfaces de Notificação de Alteração no WPF
Espero ter lhe ajudado. Abraço!
Herbert Lausmann
- Marcado como Resposta Ricardo Pulini terça-feira, 26 de fevereiro de 2019 17:48
Todas as Respostas
-
Bom dia Ricardo,
Tudo certo?
Para começarmos, por favor, nos informe qual a linguagem que está utilizando? C# ou VB.NET?
Existem varias maneiras de fazer isso. Uma que eu utilizaria, seria o padrão Singleton. Uma classe estática, com uma propriedade estática. Essa propriedade seria de um tipo de classe contendo propriedades que possam ser linkadas com DataBinding por qualquer janela e também poderiam ser atualizadas de qualquer parte do código.
Vou deixar um exemplo de uma Classe Singleton de fácil implementação:
public class Classe_Singleton : NotifyPropertyChanged { #region Singleton private static Classe_Singleton _Singleton; public static Classe_Singleton Singleton { get { if (_Singleton == null) _Singleton = new Classe_Singleton(); return _Singleton; } } private string _Propriedade; public string Propriedade { get { return _Propriedade; } set { _Propriedade = value; OnPropertyChanged("Propriedade"); OnFazerAlgumaCoisa(); } } public event EventHandler FazerAlgumaCoisa; protected virtual void OnFazerAlgumaCoisa() { FazerAlgumaCoisa?.Invoke(this, new EventArgs()); } #endregion } public class NotifyPropertyChanged : System.ComponentModel.INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string PropertyName) { if (!string.IsNullOrWhiteSpace(PropertyName)) PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } }
A propriedade chamada "Propriedade" pode ser facilmente linkada em com DataBinding no XAML em qualquer janela ou controle da sua aplicação, para monitorar. Se alguma parte do código alterar o valor da propriedade, o Controle ou Janela linkado responderá imediatamente. Você ainda tem a possibilidade de criar eventos, nos quais você pode acompanhar mudanças no code behind da sua aplicação.
Esse padrão Singleton que estou te apresentando é válido no Xamarin também! É muito utilizado em conjunto com o padrão MVVM.
Abaixo, uma maneira de você acompanhar mudanças na propriedade via código, usando o evento implementado na classe:
namespace WpfApp_Csharp { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Classe_Singleton.Singleton.FazerAlgumaCoisa += (object sender, EventArgs e) => { ///Código aqui quando a propriedade for alterada. }; } } }
Não é algo complexo, mas é um dos padrões mais utilizados na programação. Definitivamente, muito útil. Vou deixar alguns links de apoio para você dar uma lida e entender melhor a ideia em si:
MVVM STARTER PACK – INICIANDO NO MVVM – C#
Singleton - Padrão de Projeto com Microsoft .NET C Sharp
Implementando as Interfaces de Notificação de Alteração no WPF
Espero ter lhe ajudado. Abraço!
Herbert Lausmann
- Marcado como Resposta Ricardo Pulini terça-feira, 26 de fevereiro de 2019 17:48
-