将静态对象添加到资源字典中

时间:2011-04-29 16:22:22

标签: wpf mvvm resourcedictionary

我有一个在多个视图中引用的类,但我希望它们之间只共享一个类的实例。我已经实现了我的课程:

using System;

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

有没有办法可以将Singleton.Instance作为资源添加到我的资源字典中? 我想写点像

<Window.Resources>
    <my:Singleton.Instance x:Key="MySingleton"/>
</Window.Resources>

而不是每次我需要引用它时都必须写{x:static my:Singleton.Instance}

2 个答案:

答案 0 :(得分:18)

接受的答案是错误的,在XAML中完全可能。

<!-- assuming the 'my' namespace contains your singleton -->
<Application.Resources>
   <x:StaticExtension Member="my:Singleton.Instance" x:Key="MySingleton"/>
</Application.Resources>

答案 1 :(得分:5)

不幸的是,XAML无法做到这一点。但是您可以将单例对象添加到代码隐藏的资源中:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e) {
        base.OnStartup(e);

        Resources.Add("MySingleton", Singleton.Instance);
    }
}