从代码隐藏创建usercontrol时找不到静态资源

问题描述:

我正在重构应用程序以使用属性注入。这要求我从后面的代码中创建视图。最初所有内容都是在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模式。

尝试创建并调用您的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