【问题标题】:WPF MVVM Light and modern UI- Passing object to secondary viewWPF MVVM Light 和现代 UI - 将对象传递到辅助视图
【发布时间】:2016-08-15 16:13:38
【问题描述】:

我在 MVVM light WPF 中将对象传递到辅助视图时遇到问题。我有主视图模型。 follow of operation。我可以使用 MVVM light 和 Modren UI 导航服务来连接。问题是我无法将主要客户视图模型的对象发送到辅助视图模型。我想从源视图模型中设置目标视图的数据上下文。我已经尝试过了,但似乎没有用。我更喜欢没有代码,我花了很多时间都没有成功。

  public virtual void NavigateTo(string pageKey, object parameter)
    {
        lock (_pagesByKey)
        {
            if (!_pagesByKey.ContainsKey(pageKey))
            {
                throw new ArgumentException(string.Format("No such page: {0}. Did you forget to call NavigationService.Configure?", pageKey), "pageKey");
            }

            var frame = GetDescendantFromName(Application.Current.MainWindow, "ContentFrame") as ModernFrame;

            // Set the frame source, which initiates navigation
            if (frame != null)
            {
                frame.Source = _pagesByKey[pageKey];
               //i Dont know if this should work or not
                frame.DataContext = parameter;

            }
            Parameter = parameter;
            _historic.Add(pageKey);
            CurrentPageKey = pageKey;
        }
    }

任何帮助将不胜感激。我只需要如何在不使用代码的情况下设置目标视图的数据上下文。谢谢

【问题讨论】:

    标签: c# wpf mvvm-light


    【解决方案1】:

    有多种可能性,但不创建视图模型之间依赖关系的一种是使用pub/sub system in MVVMLight。基本上是这样的:

    当您从视图中选择某个实体并转换到另一个时,viewmodel 会发送一条消息,该消息会携带该给定实体。在另一个视图模型中,您会收到消息并相应地设置一些属性(用于编辑、添加新实体等)

    // mainviewmodel
    Messenger.Default.Send(new MyMessage(myObj));
    
    // otherviewmodel
    Messenger.Default.Register<MyMessage>(this, message => 
    {
        /* do something with message.MyObj */
    });
    
    // mymessage
    public class MyMessage : MessageBase
    {
        ...
        public MyObj MyObj { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多