C# 使用ContentSource属性检索内容集的DataContext
我需要使用ModernWindow的ContentSource属性来获取视图集的DataContext,请您提供帮助。我正在使用MVVM框架和Modern UI。我需要显示另一个窗口的ViewModel代码如下所示C# 使用ContentSource属性检索内容集的DataContext,c#,wpf,mvvm,modern-ui,C#,Wpf,Mvvm,Modern Ui,我需要使用ModernWindow的ContentSource属性来获取视图集的DataContext,请您提供帮助。我正在使用MVVM框架和Modern UI。我需要显示另一个窗口的ViewModel代码如下所示 public void ShowPrompt() { this.PromptWindow = ObjectFactory.GetInstance<IPromptWindowViewModel>().Window as ModernWindow; this.
public void ShowPrompt()
{
this.PromptWindow = ObjectFactory.GetInstance<IPromptWindowViewModel>().Window as ModernWindow;
this.PromptWindow.Owner = Application.Current.MainWindow;
this.PWPMainViewModel.PromptWindowsCollection.Add(this.PromptWindow);
// Here I need to get the DataContext of PromptWindow's Content
this.PromptWindow.Show();
}
public void ShowPrompt()
{
this.PromptWindow=ObjectFactory.GetInstance().Window作为ModernWindow;
this.PromptWindow.Owner=Application.Current.MainWindow;
this.PWPMainViewModel.PromptWindowsCollection.Add(this.PromptWindow);
//这里我需要获取PromptWindow内容的DataContext
this.PromptWindow.Show();
}
我做了一些调试,发现通过在“OnNavigatedTo”事件中从ModernUI插入IContent接口
public void OnNavigatedTo(FirstFloor.ModernUI.Windows.Navigation.NavigationEventArgs e)
{
IPWPMainViewModel pwpMainViewModel = ObjectFactory.GetInstance<IPWPMainViewModel>();
pwpMainViewModel.PromptMainsCollection.Add(new ContentControl { Content = e.Content });
IPromptMainViewModel promptMainViewModel = ((UserControl)e.Content).DataContext as IPromptMainViewModel;
}
public void on导航到(FirstFloor.ModernUI.Windows.Navigation.NavigationEventArgs e)
{
IPWPMainViewModel pwpMainViewModel=ObjectFactory.GetInstance();
pwpMainViewModel.promptmainscolection.Add(newcontentcontrol{Content=e.Content});
IPromptMainViewModel promptMainViewModel=((UserControl)e.Content).DataContext作为IPromptMainViewModel;
}
在这里,我能够获取ModernWindow内容的DataContext,即类型为“IPromptMainViewModel”,但在这里,很难将视图映射/加载到此ModernWindow中,因为存在多个视图实例,但我希望在ViewModel中执行此操作,其中“ShowPrompt()'存在,因为模型将与视图正确关联,因此我可以轻松地在那里映射视图
谢谢。为了完成这项工作,我自己设置了ModernWindow的内容(如视图模型中方法中的代码所示),而不使用ContentSourceDependencyProperty,如果我们使用ContentSource属性,它将被ModernWindow自身设置为ModernFrame类型,在从ModernUI导航到该视图后,创建其内容的实例WPF通过使用现代框架的源依赖属性
public void ShowPrompt()
{
this.PromptWindow = ObjectFactory.GetInstance<IPromptWindowViewModel>().Window as ModernWindow;
this.PromptWindow.Title = string.Concat("Control ", this.PromptOriginsEntity.PromptOriginsIdentity);
this.PromptWindow.Tag = this.PromptOriginsEntity.PromptOriginsIdentity;
this.PromptWindow.Owner = Application.Current.MainWindow;
// Store Window object in PromptWindowsCollection
this.PWPMainViewModel.PromptWindowsCollection.Add(this.PromptWindow);
this.PromptWindow.Show(); // inorder to retrieve the ModernFrame the ModernWindow is to be shown first
ModernFrame frameContent = (ModernFrame)this.PromptWindow.Template.FindName("ContentFrame", this.PromptWindow);
UserControl userControl = new UserControl { Content = GetView<IPromptViewModel>(), Tag = this.PromptOriginsEntity.PromptOriginsIdentity };
frameContent.Content = userControl;
this.PWPMainViewModel.PromptsCollection.Add(userControl);
IPromptViewModel promptViewModel = (IPromptViewModel)((IView)userControl.Content).DataContext;
promptViewModel.PromptEntity.Identity = this.PromptOriginsEntity.PromptOriginsIdentity;
}
public void ShowPrompt()
{
this.PromptWindow=ObjectFactory.GetInstance().Window作为ModernWindow;
this.PromptWindow.Title=string.Concat(“控制”,this.PromptOriginsEntity.PromptOriginsIdentity);
this.PromptWindow.Tag=this.PromptOriginsEntity.PromptOriginsIdentity;
this.PromptWindow.Owner=Application.Current.MainWindow;
//在PromptWindowsCollection中存储窗口对象
this.PWPMainViewModel.PromptWindowsCollection.Add(this.PromptWindow);
this.PromptWindow.Show();//为了检索ModernFrame,首先显示ModernWindow
ModernFrame frameContent=(ModernFrame)this.PromptWindow.Template.FindName(“ContentFrame”,this.PromptWindow);
UserControl UserControl=newusercontrol{Content=GetView(),Tag=this.PromptOriginsEntity.PromptOriginsIdentity};
Content=userControl;
this.PWPMainViewModel.PromptsCollection.Add(userControl);
IPromptViewModel promptViewModel=(IPromptViewModel)((IView)userControl.Content).DataContext;
promptViewModel.PrompEntity.Identity=this.PromptoRigInstity.PromptoRigInsideEntity;
}
我已经上传了一个原型应用
谢谢。从哪里来?视图还是视图模型?还是别的地方?你试过什么?如果有错误,您会遇到哪些错误?你能提供更多的细节吗?目前很难帮助你