我有一个动态加载xaml的子窗口,现在我想做一些绑定以便在子窗口和父窗口之间传递消息。因为这个项目是基于插件的,所以对于只负责加载插件并帮助他们进行通信的shell来说,确定xaml中的控件是不可能的,因此在后面的代码中操作它们是不明智的。Silverlight:动态加载和绑定Xaml
我已经实现了一个AppDataStore类来激发整个应用程序的消息传递。
AppDataStore.Values["SomeKey"] = "SomeObject";
就这样我不知道是否有可能绑定动态加载到视图模型,因此在二传手,我可以使用AppDataStore的消息控件。此外,如果我能以这种方式实施一些验证,那将是完美的。
你可能想知道为什么我试图在我甚至不知道控件是什么的情况下绑定控件。为了回答这个问题,我认为如果我指定要在控件的“Tag”属性中绑定的属性,则可以遍历可视化树并使用Reflection获取属性值。
无论如何,以上只是我的一些想法,直到现在,我一直坚持在这一点上很长时间。如果您知道如何实施它,或者您有更好的解决方案,请告诉我。提前致谢!
谢谢您的回答。其实我在我的项目中使用MEF和CM。所以消息传递并不是一个很大的问题。问题在于,很难在代码中调用消息传递,因为xaml(动态控件)是易失性的 - 尽管它是我指定的,我不希望代码依赖于因为整个实现构建在MVVM上。 – 2013-05-07 14:04:16
那么为什么要使用代码隐藏 - 为什么不只是从视图模型调用消息?你有没有麻烦布线从视图 - > viewmodel的控制? – Charleh 2013-05-07 14:08:29
是的。因为动态加载的xaml控件可能是一个TextBox或一个CheckBox或什么的,所以将这个值绑定到ViewModel并不容易。我希望我可以将它们全部绑定到字典,但不知道它是否可行。 – 2013-05-07 14:39:10