Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 单击WPF中的按钮即可显示用户控件(WPF)视图页面_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 单击WPF中的按钮即可显示用户控件(WPF)视图页面

C# 单击WPF中的按钮即可显示用户控件(WPF)视图页面,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,在这个社区中,点击按钮打开窗口视图有很多问题,我们只需要创建视图实例并使用。Show,有些问题是基于在窗口视图中使用用户控件 我按照MVVM模式创建一个WPF应用程序,在视图中我创建了一个名为SalesView.xaml的文件,这是一个User Control(WPF)视图,默认情况下,我从App.xaml中设置Dashboard.xaml,它是一个窗口视图,项目结构如下: 我的要求是在仪表板中有一个按钮.xaml单击此按钮,我想打开一个SalesView.xaml,它是用户控件(WPF)视图

在这个社区中,点击按钮打开窗口视图有很多问题,我们只需要创建视图实例并使用
。Show
,有些问题是基于在窗口视图中使用用户控件

我按照MVVM模式创建一个WPF应用程序,在视图中我创建了一个名为
SalesView.xaml
的文件,这是一个
User Control(WPF)
视图,默认情况下,我从
App.xaml
中设置
Dashboard.xaml
,它是一个窗口视图,项目结构如下:


我的要求是在
仪表板中有一个按钮.xaml
单击此按钮,我想打开一个
SalesView.xaml
,它是
用户控件(WPF)
视图,而不是窗口视图。

似乎需要一些shell来承载用户控件。最简单的方法是将它们作为内容放在主窗口上,而不是以前的内容。或者使用类似的框架

通常,我会创建一个名为控制器/视图管理器的类。然后将我的视图和vm传递给它,然后类将绑定它并将其放入宿主窗口

class ViewManager
{
   public void ShowView<T>(object viewModel) where T: UserControl, new()
   {
       var view = T();
       var window = new Window(); // feel free to prelace this simple approach with hosting shell
       view.DataContext = viewModel;
       window.Content = view;
       window.Show();
   }
}
类视图管理器
{
public void ShowView(对象视图模型),其中T:UserControl,new()
{
var-view=T();
var window=new window();//请随意使用宿主shell预先体验这种简单方法
view.DataContext=viewModel;
window.Content=view;
window.Show();
}
}
使用示例:

new ViewManager().ShowView<MyUserControl>(new MyViewModel());
newviewmanager().ShowView(新的MyViewModel());