Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ContentSource属性检索内容集的DataContext_C#_Wpf_Mvvm_Modern Ui - Fatal编程技术网

C# 使用ContentSource属性检索内容集的DataContext

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.

我需要使用ModernWindow的ContentSource属性来获取视图集的DataContext,请您提供帮助。我正在使用MVVM框架和Modern UI。我需要显示另一个窗口的ViewModel代码如下所示

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;
}
我已经上传了一个原型应用


谢谢。

从哪里来?视图还是视图模型?还是别的地方?你试过什么?如果有错误,您会遇到哪些错误?你能提供更多的细节吗?目前很难帮助你