在pageA中,我有一个链接到pageB
的HyperlinkButton private void Link1_Click_1(object sender, RoutedEventArgs e)
{
HyperlinkButton btn = sender as HyperlinkButton;
string url = btn.Tag.ToString();
this.mainFrame.Navigate(new Uri(url, UriKind.Relative));
}
如何使pageB上的COMPLEX对象可用于pageB?
当我重新创建pageB或将其设置为pageA上的公共属性时,我可以访问它吗?
我可以将对象添加到App.xaml中,以便它可以在任何地方使用,但我不认为这是最好的实践
答案 0 :(得分:2)
我认为最简单的方法是使用全局Context实现来设置/获取数据。
public class Context
{
static Context _context = null;
static object sync = new object();
public object Data { get; set; }
private Context()
{
}
public static Context GetContext()
{
if _context == null)
{
lock (sync)
{
if _context == null)
{
_context = new Context();
}
}
}
return _context;
}
}
//Load your data, and on any page you need it, just do:
Context c = Context.GetContext();
//set or get c.Data here
如果您有多个变量,可以使用词典根据键设置/获取值
答案 1 :(得分:0)
最小化您在全局或静态结构中放置的数据量总是一个好主意,但有时您不能(轻松地)绕过它。尽管如此,你仍然希望避免它,因为浮动的静态值太多会导致非常奇怪的副作用,难以调试。我通常做的是在我的页面上包含一个Initialize(StatusObject status)方法,我在单击超链接时创建的实例上调用该方法。困难的部分实际上是处理新的PageB实例。最好的方法是将Navigated事件挂钩到将要导航的帧上,并获取NavigationEventArgs.Content值。当然,这意味着您必须担心时间问题,因为导航是异步发生的......
答案 2 :(得分:0)
您还可以使用Session将对象从一个页面传输到另一个页面。
E.g.:-
Page A:
MyComplexObject complex = new MyComplexObject();
Session["cObj"] = complex;
Page B:
if(Session["cObj"] != null){
MyComplexObject new_complex = (MyComplexObject)Session["cObj"];
}
or
MyComplexObject new_complex = Session["cObj"] as MyComplexObject;
答案 3 :(得分:0)
我能找到的最佳方法是在PageA上设置框架的DataContext,然后在pageB中我可以使用以下方式访问数据:
((System.Windows.Controls.Frame)this.Parent).DataContext
答案 4 :(得分:0)
就Silverlight而言,一切都在客户端运行,因此它与我们在asp.net中的客户端服务器架构不同。您可以创建一个静态类,其中包含一些公共属性,您可以将其访问到任何其他页面。
public class Cache
{
private static Cache _cache;
private Cache()
{}
public Cache Instance
{
get
{
if(_cache == null)
_cache = new Cache();
return _cache;
}
}
public object CachedData
{get; set;}
}
在第一页中,您可以这样做 Cache.Instance.CachedData =(object)“Hello World”; 在第二页,你可以做到 string Data =(string)Cache.Instance.CachedData;
如果您觉得有帮助,请标记。
答案 5 :(得分:0)
取决于场景,但隔离存储可能是一个值得考虑的选择。它旨在用于存储数据客户端以减少服务器上的负载,这似乎是基于您所描述的理想情况。