我想在一个单独的窗口中显示我的UserControl
,例如通过调用
var windowHandler = new WindowHandler();
windowHandler.Show(new SchoolViewModel);
如何存档?我尝试过以下方法:
在App.xaml中设置DataTemplate
:
<Application.Resources>
<ResourceDictionary>
<DataTemplate DataType="{x:Type viewModel:SchoolViewModel}">
<view:SchoolUserControl />
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
在代码隐藏中调用它:
private void Application_Startup(object sender, StartupEventArgs e)
{
var windowHandler = new WindowHandler();
windowHandler.ShowWindow(new SchoolViewModel(), 200, 200);
}
WindowHandler类:
public class WindowHandler
{
public void ShowWindow(object dataContext, int height, int width)
{
Window window = new Window()
{
DataContext = dataContext,
Width = width,
Height = height
};
window.Show();
}
}
它确实显示了一个窗口,但它是空的。它为什么空?我还在DataContext
的代码隐藏中设置了UserControl
:
public SchoolUserControl()
{
InitializeComponent();
DataContext = this;
}
答案 0 :(得分:0)
Window
模板显示为Window.Content
而非Window.DataContext
。因此,您应该将要显示的内容分配为内容:
public class WindowHandler
{
public void ShowWindow(object dataContext, int height, int width)
{
Window window = new Window()
{
Content = dataContext,
Width = width,
Height = height
};
window.Show();
}
}
另外,正如其他人所说,你应该删除这一行:
DataContext = this;
来自SchoolUserControl
的,因为否则您将无法访问控件中的模板化视图模型。由于SchoolUserControl
是DataTemplate
的一部分,因此模板化的视图模型将自动从SchoolUserControl.DataContext
获取。