2017-06-05 111 views
1

我正在重構應用程序以使用屬性注入。這要求我從後面的代碼中創建視圖。最初所有內容都是在XAML中創建的,綁定通過靜態資源設置爲視圖模型。這無法控制注入數據到視圖模型的服務。從代碼隱藏創建usercontrol時找不到靜態資源

這是App.xaml.cs:

public App() 
{ 
    this.MainWindow = new MainWindow(new MainWindowViewModel(new DbDataService())); 
    MainWindow.Show(); 


} 

MainWindowViewModel被設定爲在DataContext。 App.xaml中包含此資源用於在列表框觀看的產品類型類:

<DataTemplate x:Key="DataTemplate" DataType="{x:Type classes:Product}"> 

的主窗口具有用於每個視圖中的選項卡。

ProductsTab.Content = new MainView(mainWindowViewModel); 

當我這樣做,我得到在該線路上的MainView以下錯誤:

<dxe:ListBoxEdit Grid.Column="0" ItemTemplate="{StaticResource DataTemplate}" ...etc... /> 

「‘上提供價值’系統我有一個選項卡的視圖在主窗口的構造函數創建這樣.Windows.StaticResourceExtension'拋出一個異常。'行號「37」和行位置「31」。「

我曾嘗試過: 我已經嘗試在XAML中創建Tab的視圖,並將其數據上下文設置給父母,但是,我仍然得到此異常。 我已經嘗試將我的靜態資源更改爲動態資源,這在運行時不會導致錯誤,但列表框不會正確顯示信息。

我需要知道的內容: 如何使用靜態/動態資源進行體面注入。 如果有更好的方法來解決這個問題,比如在代碼中創建模板並將它們注入視圖中?

我的一些擔心: 我想爲此應用程序添加依賴注入,但是,我覺得我使用的方法不僅打破了資源,而且打破了MVVM模式。

回答

1

嘗試創建並調用您的MainWindowOnStartup方法您的應用程序類:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 
     this.MainWindow = new MainWindow(new MainWindowViewModel(new DbDataService())); 
     MainWindow.Show(); 
    } 
} 

這應該提供您在App.xaml中(或在ResourceDictionary定義「的DataTemplate」的資源,你從App.xaml合併)。

+0

這是一個這麼簡單的修復!你是一個拯救生命的人,非常感謝你:) – CEvans