绑定app.xaml以在c#中查看WPF

时间:2015-04-22 05:26:35

标签: c# .net wpf xaml mvvm

我使用MVVM框架并在网上获得本教程:https://code.msdn.microsoft.com/windowsdesktop/How-to-use-MVVM-Pattern-0e2f4571http://www.c-sharpcorner.com/UploadFile/raj1979/simple-mvvm-pattern-in-wpf/

现在,我的问题是:

即使没有语义错误,我也无法显示mainpage.xaml。这是我在app.xaml.cs上的代码:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    BasicWPF.View.MainPage window = new MainPage();
    UserViewModel VM = new UserViewModel();
    window.DataContext = VM;
    window.Show();
}

任何人都可以帮助我吗?谢谢你的帮助! :)

感谢所有帮助过的人。

[解决]

将app.xaml中的startupuri更改为要加载的页面。在我的情况下

1:我改变了它:

StartupUri="View/MainPage.xaml"

2:在app.xaml.cs中,我输入了以下代码:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    BasicWPF.View.MainPage window = new MainPage();
    UserViewModel VM = new UserViewModel();
    window.DataContext = VM;
}

从我之前的代码中删除此代码:window.show();因为它启动了两次来自app.xaml和app.xaml.cs的页面。为防止这种情况,请删除:window.show();

再次感谢你! :)

3 个答案:

答案 0 :(得分:1)

在app.xaml中设置起始页面,而不是app.xaml.cs文件 - 在Application标签中,如果没有属性StartupUri - 添加一个并将其值设置为您的页面名称,这样页面将是应用程序启动后立即自动显示。看起来应该是这样的:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainPage.xaml">

我正在考虑你是这样做的,因为你希望设置页面的DataContext,但有一种更好的方法来设置页面的DataContext,它是通过直接将它设置到你的XAML代码中。这是一个例子:

<Page x:Class="WpfApplication1.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525" >
    <Page.DataContext>
        <local:UserViewModel/>
    </Page.DataContext>

xmlns:local 是映射到您为其设置的命名空间的前缀。有了这个,您就可以使用前缀 - local:UserViewModel 来访问命名空间中包含的类型。

答案 1 :(得分:0)

你能做的不是在app.xaml.cs中设置数据上下文,而是挂钩主窗口的加载事件并添加以下代码。

   public MainWindow()
    {
        InitializeComponent();
        this.Loaded += MainWindow_Loaded;
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        UserViewModel VM = new UserViewModel();
        this.DataContext = VM;
    }  

这应该有效。别忘了从App.xaml.cs中删除代码。 感谢

答案 2 :(得分:0)

因此,在您的情况下,您需要在主窗口中有一个主窗口来加载页面。 您可以做的是在主窗口添加一个框架,如

 <Frame x:Name="myFrame"/>

然后在主窗口加载的事件中添加以下代码

  void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        UserViewModel VM = new UserViewModel();
        this.DataContext = VM;
        myFrame.Content = new MainPage();      
    }

这就像我们正在添加一个框架并将视图加载到该框架。