【问题标题】:Reference ResourceDictionary from ViewModel从 ViewModel 引用 ResourceDictionary
【发布时间】:2012-08-22 16:02:11
【问题描述】:

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

我正在做以下事情:

  • ResourceDictionary 文件位于 MyApp/ViewModels 中的 ViewModelsResources.xaml,其中 MyApp 是我的 Silverlight 应用程序的根文件夹
  • ViewModelsResources.xaml 标记为构建操作:Content,复制到输出目录:Copy always,自定义工具:MSBuild:Compile
  • ResourceDictionary 对象被实例化(并且此代码与资源字典文件位于同一文件夹中的类中)
    ResourceDictionary VMResources = new ResourceDictionary()
    {
        Source = new Uri("/ViewModels/ViewModelsResources.xaml", UriKind.Relative)
    };
  • 然后通过基于 x:Key 值的索引引用该对象:Template1 = VMResources["myTemplate"] as ControlTemplate;(与上面的代码示例相同的类)

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

【问题讨论】:

    标签: c# silverlight mvvm com resourcedictionary


    【解决方案1】:

    事实证明这确实像我描述的那样工作,但是您不能在资源字典中找到的模板中指定事件。我应该意识到这会导致问题,但 COM 让我失望了。为了解决对事件处理程序的需求,我使用了 Behaviors。有大量关于行为的读物。我开始herehere

    注意:如果有人认为我应该删除这个问题,因为它实际上按照建议的方式工作,请按此评论。我认为离开这可能会帮助尝试做与我相同的事情的人。

    【讨论】: