Sql,Wpf,Xaml,C#,绑定数据,动态资源,访问非静态数据,获取对象的引用

好吧,我对WPF和XAML非常陌生,尽管我的搜索我找不到一个简单的解决方案,但在我看来,我很快就找不到答案了。

问题很简单,我创建了一个WPF项目,并在SelectList.xaml中有一个数据网格。一旦选中一行,我将所选行保存在一个对象中,称这个对象称为“类别”。 到目前为止一切正常,但我无法弄清楚如何从其他地方temp.xaml获取对该对象的引用?

非常感谢任何帮助将非常感谢干杯

在WPF中提供间接通信的常用方法是利用Mediator模式。 您可以使用调解器发布您的类别选择,并让临时视图订阅您的类别选择更改的通知。

有关具体介体的简单示例,请参见http://www.eggheadcafe.com/tutorials/aspnet/ec832ac7-6e4c-4ea8-81ab-7374d3da3425/wpf-and-the-model-view-vi.aspx 。 如果您想要更强大的实现,还有一些流行的MVVM框架可用于提供Mediator模式实现。

简单中介实施:

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(string id, Action action) { if (!callbacks.ContainsKey(id)) { callbacks[id] = new List>(); } callbacks[id].Add(action); } public void Unregister(string id, Action action) { callbacks[id].Remove(action); if (callbacks[id].Count == 0) { callbacks.Remove(id); } } public void SendMessage(string id, object message) { callbacks[id].ForEach(action => action(message)); } } 

SelectList.xaml代码隐藏:

 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代码隐藏:

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

创建一个可访问的方法(如果你愿意,公开),它接受文件后面的“Temp.xaml”代码中这个“类别”对象的引用。 然后通过此方法将“类别”对象从文件后面的“SelectList.xaml”代码传递到“Temp.xaml”文件。