【问题标题】:UWP ResourceDictionary is not being loaded when I add a second object to it向 UWP ResourceDictionary 添加第二个对象时未加载它
【发布时间】:2016-03-31 16:19:46
【问题描述】:

我有一个适用于 Windows 10 的 UWP 应用程序,其中插入了 MVVM Light。 我将 ViewModelLocator 存储在 App.Resources 中。 当我的 App.Resources 中只有一个 ViewModelLocator 时,一切正常。

<Application.Resources>
    <viewModel:ViewModelLocator x:Key="Locator" />
</Application.Resources>

只要我添加了 String、Converter 或类似的东西,应用程序就不会崩溃,但不再调用 ViewModelLocator 构造函数。 没有错误或异常被抛出,只是 ResourceDictionary 没有被加载或在加载过程中失败。

<Application.Resources>
    <viewModel:ViewModelLocator x:Key="Locator" />
    <x:String x:Key="SampleString">Hello</x:String>
</Application.Resources>

如果我添加样式、数据模板、画笔、颜色 - 一切正常。

以前在 Windows Phone 8、Silverlignt 或 WPF 上没有注意到这种行为。 将样式或对象移动到单独的 ResourceDictionaries 并使用 MergedDictionaries 加载它们没有帮助。

我想在 ResourceDictionary 中有一个对象列表,以便在应用启动时自动调用这些对象的所有构造函数。 请指教。

附注: 甚至两个类似的转换器都不起作用,而创建一个没有任何问题

<Application.Resources>
    <!--<viewModel:ViewModelLocator x:Key="Locator" />-->
    <converters:StringFormatConverter x:Key="StringFormat1" />
    <converters:StringFormatConverter x:Key="StringFormat2" />
</Application.Resources>

寻找 ResourceDictionary 用法的例子,发现了类似的问题: Merged ResourceDictionary initalization in UWP app

【问题讨论】:

    标签: xaml mvvm mvvm-light uwp windows-10-mobile


    【解决方案1】:

    尝试将它们添加到这样的资源字典中

    <Application.Resources>
        <ResourceDictionary>
            <viewModels:ViewModelLocator x:Key="Locator"/>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="XAMLResources/Styles.xaml" />                
                <ResourceDictionary Source="XAMLResources/DataTemplates.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

    如果你想看一个完整的例子,代码 sn-p 来自 GitHub 上的这个存储库https://github.com/AppCreativity/Kliva

    您会注意到我们在 Styles.xaml 中添加了转换器,并且工作正常...

    【讨论】:

    • 我已经尝试过这种方法。相关问题指出,如果您按键调用这些资源,它们就会被初始化。但是,它没有解释为什么在您第一次引用 Locator ctor 之前没有调用它。
    • 实际上,您的确切设置是有效的,并且 ViewModelLocator 是在不调用它的情况下构建的。谢谢!
    • 很高兴能帮上忙 :)
    【解决方案2】:

    这都是因为延迟初始化。我做了一些实验并弄清楚了这张照片。我希望你能抓住这个想法。 http://screencast.com/t/mxyBGBDuZ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多