SQL, Wpf, Xaml, C #, données de liaison, ressource dynamic, access à des données non statiques, obtention d’une référence à un object

Ok, eh bien je suis pas mal jolie assez nouvelle pour WPF et XAML, malgré ma recherche, je n’ai pas pu trouver une solution simple et il me semble que je ne pourrai pas trouver de réponse très bientôt.

La question est si simple, j’ai créé un projet WPF et une grid de données dans SelectList.xaml Une fois une ligne sélectionnée, j’enregistre la ligne sélectionnée dans un object appelé cet object appelé “catégorie”. Jusqu’à présent, tout va bien, mais je ne vois pas comment obtenir une référence à cet object à partir d’un autre endroit, temp.xaml?

Merci beaucoup Toute aide sera très appréciée A la vôtre

Un moyen courant de fournir une communication indirecte dans WPF consiste à utiliser le modèle Mediator. Vous pouvez utiliser un médiateur pour publier la sélection de votre catégorie et faire en sorte que la vue temporaire souscrive à la notification d’un changement de sélection de votre catégorie.

Voir http://www.eggheadcafe.com/tutorials/aspnet/ec832ac7-6e4c-4ea8-81ab-7374d3da3425/wpf-and-the-model-view-vi.aspx pour un exemple simple d’un médiateur en béton. Il existe également plusieurs infrastructures MVVM populaires disponibles qui fournissent des implémentations de modèle Mediator si vous souhaitez une implémentation plus robuste.

Implémentation simple du médiateur:

public sealed class Mediator { private static Mediator instance = new Mediator(); private readonly Dictionary>> callbacks = new Dictionary>>(); private Mediator() { } public static Mediator Instance { get { return instance; } } public void Register(ssortingng id, Action action) { if (!callbacks.ContainsKey(id)) { callbacks[id] = new List>(); } callbacks[id].Add(action); } public void Unregister(ssortingng id, Action action) { callbacks[id].Remove(action); if (callbacks[id].Count == 0) { callbacks.Remove(id); } } public void SendMessage(ssortingng id, object message) { callbacks[id].ForEach(action => action(message)); } } 

SelectList.xaml code-behind:

 private void DataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { var category = e.AddedItems.FirstOrDefault() as Category; if(category != null) { Mediator.Instance.SendMessage("Category Selected", category); } } 

Temp.xaml code-behind:

 public Temp() { InitializeComponent(); Mediator.Instance.Register ( "Category Selected", OnCategorySelected ); } private void OnCategorySelected(object parameter) { var selectedCategory = parameter as Category; if(selectedCategory != null) { } } 

Créez une méthode accessible (publique si vous le souhaitez) qui accepte la référence de cet object “category” dans le fichier de code “Temp.xaml”. Ensuite, transmettez l’object “category” du fichier derrière le code “SelectList.xaml” au fichier “Temp.xaml” par cette méthode.