2010-03-09 84 views
1

我希望得到一些指导。我有一个包含窗口(Window1)和页面(Page1)的wpf应用程序。该页面在窗口内使用框架。将值从WPF页面传递到其父窗口

我在页面中有一个按钮,我希望能够按下并将字符串值传回到mainwindow并将其显示在标签中。

任何人都可以帮助一个基本的例子,因为我不知道!

回答

0

一般来说,它听起来像你需要在你的应用程序中的某种发布者/订阅者模式事件服务。这将是您的外部窗口可以订阅的Singleton对象。这项服务的一般呼叫可能看起来像:

EventService.Instance.AddListener("TheEventICareAbout" 
      , delegate(possiblySomeParameters) { 
       //Do Interesting Stuff Here. This code can access members of your 
       //window class or call methods on it to react to the event. 
       }) ; 

然后你的孩子页面可能提高了一些服务活动:

EventService.Instance.RaiseEvent("TheEventICareAbout" 
      , new EventParameters(possiblySomeParameters)) ; 

内部,该服务可能只是一个事件名称的字典,并框架event s。您的AddListener将检查事件名称是否已经存在,如果有,请将新代理添加到event。如果不是,它将在字典中创建一个新条目并存储新代表,如event中所示。

大多数应用程序框架在某个时候使用了这种模式,所以我确信如果你不想编写自己的应用程序,有很多选择。看看Prism Event Aggregator。 This is a short introduction,但基本格式将保持不变,无论您自己编写它还是如果您抓取预先存在的解决方案。

这种方法的基本优点是松耦合和可扩展性。它也适合MVVM架构,您的ViewModel可以引发其他ViewModel响应的事件。这可以让您将业务逻辑从视图中取出并放到可以更完整地进行测试的位置。

虽然我不会推荐它,但“快速和肮脏”解决方案的另一种选择是向页面添加事件并让窗口为其添加处理程序。页面然后可以引发这个自定义事件。在这里你要小心的是垃圾收集(如果你没有正确地移除处理程序,你的页面可能不会得到GC),并确保你不会收到很多页面,每个页面都会引发一个稍微不同的事件。

相关问题