我使用MVVM框架并在网上获得本教程:https://code.msdn.microsoft.com/windowsdesktop/How-to-use-MVVM-Pattern-0e2f4571和http://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();
再次感谢你! :)
答案 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();
}
这就像我们正在添加一个框架并将视图加载到该框架。