使用VS 2013,C#,Windows应用商店
我需要将一个对象从主框架发送到新框架,然后再使用它。 所以我有主框架,第二框架(用于处理被控对象)和DataModel。
创意 - 显示我在主框架上的所有数据,而不是选择一个对象,按下它,按下新框架后会出现,您可以使用新框架中的选定项目。
问题 - 如何将对象从一个帧发送到另一个帧。
目前我做了下一步:创建具有静态属性的其他静态类:
public static class GetCurrentEvent
{
public static Event CurrentEvent { get; set; }
}
因此,首先我在主框架上调用此类的属性,并使用它保存所需的对象:
private void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
var clickedItems = (Event)e.ClickedItem;
GetCurrentEvent.CurrentEvent = new Event(
clickedItems.UniqueId,
clickedItems.Name,
clickedItems.Place,
clickedItems.Description,
clickedItems.Start,
clickedItems.End,
clickedItems.ImagePath
);
if (this.Frame != null)
{
this.Frame.Navigate(typeof(ChangeEvent));
}
}
之后我在新框架中使用此属性:
private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
this.DataContext = GetCurrentEvent.CurrentEvent;
...
}
一切正常,但我认为这不是一个完美的方法。
那么,问题是如何改变代码以改进方法,或者如何将对象从一个类发送到另一个类?
修改
选择varinat将对象从Frame发送到Frame - 使用参数:
var clickedItems = (Event)e.ClickedItem;
this.Frame.Navigate(typeof(ChangeEvent), clickedItems);
然后在新Frame中转换为所需类型:
this.DataContext = (Event)e.NavigationParameter;
答案 0 :(得分:1)
这有很多方法可以实现,这往往是一种自以为是的辩论。
我通常选择一个简单的解决方案,例如在全局可访问的单例中保存状态/会话变量。我调用singleton Global并将其保存在命名空间的根目录中。 例如:
public sealed class Global
{
#region Singlton Contructor
Global() { }
static readonly Global instance = new Global();
public static Global Default
{
get { return instance; }
}
#endregion
#region Global Settings
public Settings Settings {get;set;}
private AuthenticatedUser _authenticatedUser;
public AuthenticatedUser AuthenticatedUser
{
get
{
return _authenticatedUser;
}
set { _authenticatedUser = value; }
}
private UserSession _currentSession;
public UserSession CurrentSession
{
get
{
if (_currentSession == null) _currentSession = UserSessionService.UserSessionFactoy();
return _currentSession;
}
private set { _currentSession = value; }
}
#endregion
}
在这种情况下,CurrentSession会跟踪我想要帧到帧传递的对象。它可以通过
轻松访问Global.CurrentSession.SomePropertyOrObject