使用DataContext显示新窗口



我想简单地在单独的窗口中显示我的 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中,因为否则您将无法从控件内访问模板的视图模型。并且由于SchoolUserControlDataTemplate的一部分,因此模板视图模型将自动从SchoolUserControl.DataContext获得。

最新更新