如何将对象从一个帧发送到另一个帧

时间:2014-02-25 22:51:24

标签: c# .net windows-store-apps frame

使用VS 2013,C#,Windows应用商店

我需要将一个对象从主框架发送到新框架,然后再使用它。 所以我有主框架,第二框架(用于处理被控对象)和DataModel。

enter image description here

创意 - 显示我在主框架上的所有数据,而不是选择一个对象,按下它,按下新框架后会出现,您可以使用新框架中的选定项目。

问题 - 如何将对象从一个帧发送到另一个帧。

目前我做了下一步:创建具有静态属性的其他静态类:

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;

1 个答案:

答案 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