我想简单地在单独的窗口中显示我的 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;
}
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
获得。