从ViewModel引用ResourceDictionary

时间:2012-08-22 16:02:11

标签: c# silverlight mvvm com resourcedictionary

我一直在尝试在视图模型中加载资源字典XAML文件。我能够实例化它,并且调用它不会导致立即错误,但是在控制返回到UI之后,会出现错误弹出“错误HRESULT E_FAIL已从调用COM组件返回”。

我正在做以下事情:

  • ResourceDictionary文件ViewModelsResources.xaml位于MyApp/ViewModels,其中MyApp是我的Silverlight应用程序的根文件夹
  • ViewModelsResources.xaml标记为Build Action:Content,Copy to Output Directory:Copy always,Custom Tool:MSBuild:Compile
  • ResourceDictionary对象实例化(并且此代码位于与资源字典文件相同的文件夹中的类中)
    ResourceDictionary VMResources = new ResourceDictionary()
    {
        Source = new Uri("/ViewModels/ViewModelsResources.xaml", UriKind.Relative)
    };
  • 然后通过基于x的索引引用对象:键值:Template1 = VMResources["myTemplate"] as ControlTemplate;(与上面的代码示例相同的类)

调试显示VMResourcesTemplate1被分配了良好的值。我不知道为什么这会抛出关于COM组件的错误,但我已经将它隔离到引用此ResourceDictionary时。如果我取出引用VMResources[x]的行,则没有错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

事实证明这确实可行,但我不能在资源字典中找到的模板中指定事件。我应该意识到这会导致问题,但COM却让我失望了。为了解决事件处理程序的需要,我正在使用Behaviors。有很多关于行为的阅读。我开始herehere

注意:如果有人认为我应该删除这个问题,因为它实际上是按照建议工作的,所以只需评论。我想离开这可能会帮助某些人尝试做同样的事情。