从代码隐藏创建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模式。
答
尝试创建并调用您的MainWindow
在OnStartup
方法您的应用程序类:
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合并)。
这是一个这么简单的修复!你是一个拯救生命的人,非常感谢你:) – CEvans