WPF MVVM轻和现代UI-传递对象到辅助视图

本文关键字:对象 视图 UI- MVVM WPF | 更新日期: 2023-09-27 18:02:32

我在MVVM light WPF中将对象传递到次要视图时遇到问题。我有主视图模型。操作的后续。我能够使用MVVM光和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;
        }
    }
如有任何帮助,我将不胜感激。我只需要如何设置目标视图的数据上下文,而不使用后面的代码。由于

WPF MVVM轻和现代UI-传递对象到辅助视图

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

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

// 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; }
}