2013-10-10 104 views
0

創建新的WPF 4.5 MVVM Light應用程序後,我想更改啓動URI,以便在應用程序啓動之前進行一些檢查。我做了如下修改的App.xaml:MVVM Light - 更改啓動URI

<Application x:Class="MvvmLight1.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vm="clr-namespace:MvvmLight1.ViewModel" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     StartupUri="MainWindow.xaml" 
     mc:Ignorable="d"> 

要:

<Application x:Class="MvvmLight1.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vm="clr-namespace:MvvmLight1.ViewModel" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d"> 

,並增加了OnStartup方法將App.xaml.cs

public partial class App : Application 
{ 
    static App() 
    { 
     DispatcherHelper.Initialize(); 
    } 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     //base.OnStartup(e); 

     MainWindow win = new MainWindow(); 
     win.Show(); 
    } 
} 

這樣做似乎改變的背景下,窗口運行。我嘗試設置數據上下文到MainViewModel,但這似乎沒有幫助。

+0

你對'Application'定義做了什麼改變?我看不出有什麼區別......你還有'StartupUri =「MainWindow.xaml」'。你在哪裏設置'DataContext'?我也沒有看到。 – Sheridan

+0

看起來很好,儘管這完全取決於我可憐的格式! –

+0

就DataContext而言,改變它並沒有什麼區別,這就是爲什麼我沒有包含它。 –

回答

0

似乎你不給添加了Startup處理您Application定義...試試這個:

<Application x:Class="MvvmLight1.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vm="clr-namespace:MvvmLight1.ViewModel" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" Startup="OnStartup"> <!-- <<< Here --> 

UPDATE >>>

不能使用此的任何方法。 ..你似乎沒有使用正確的方法定義爲你的啓動時的處理程序......我的是這樣的:

public void App_Startup(object sender, StartupEventArgs e) 
{ 

} 

嘗試添加object sender參數給你的處理程序。

+0

好的,那不行。但是,如果我將啓動設置爲新方法,那麼它確實有效。然而,新啓動方法的一個斷點顯示它從來沒有實際觸發它!爲什麼這個工作? (順便說一下''OnStartup''上的斷點顯示它執行的是是否啓動屬性被設置。 –

+0

我重寫'OnStartup'方法 - 這不僅僅是一個隨機方法。就像我說的,我試過了添加處理程序,但它永遠不會觸發(儘管它似乎解決了這個問題) –

+0

我的錯誤:不要重寫'OnStartup'方法,而是嘗試處理['Application.Startup Event'](http:// msdn。 microsoft.com/en-us/library/system.windows.application.startup.aspx)與所需的[System.Windows.StartupEventHandler](http:// msdn。像我已經展示過的那樣,microsoft.com/en-us/library/system.windows.startupeventhandler.aspx)。然後處理程序會被調用。 – Sheridan

0

你應該在App.xaml.cs類似:

base.OnStartup(e); 
var window = new MainWindowView(); 
var viewModel = new MainWindowViewModel(); 
window.DataContext = viewModel; 
window.Show(); 

或MainView.xaml:

<Window.DataContext> 
    <vms:MainWindowViewModel /> 
</Window.DataContext> 

UPDATE >>>

Okej我下載了MVVM光明工程4.5 WPF添加到我的VS2012,我做了什麼: 1.在App.xaml中刪除了啓動 2.在MainWindow.xaml中刪除了數據上下文降級 3.創建類似的代碼:

protected override void OnStartup(StartupEventArgs e) 
    { 
    base.OnStartup(e); 
    var window = new MainWindow {DataContext = new MainViewModel(new DataService())}; 
    window.Show(); 
    } 

而且一切工作正常。

+0

這不起作用,因爲MVVM燈中的主視圖模型具有一個接受數據服務的構造函數。此外,它不能解釋爲什麼它起作用,因爲startuuri被設置爲主視圖 –

+0

您的更新引用了SL應用程序。我正在使用WPF。 –

+0

Okej編輯我的帖子。我下載了WPF 4.5 MVVM Light Application,並在我的文章中做了類似的事情。 – 2432683