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;
}
}
如有任何帮助,我将不胜感激。我只需要如何设置目标视图的数据上下文,而不使用后面的代码。由于
有多种可能性,但其中一种不会在视图模型之间创建依赖关系的是在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; }
}