MEFを使用して、各ビューモデルから設定ビューをエクスポートし、それらをスタックパネルなどのメイン設定ビューに追加するビューのリストとしてインポートできます。
MEFの使用に関する優れた情報源は次のとおりです。http://mef.codeplex.com/wikipage? title = Guide
これが私がもっと早く起きることを意図したサンプルプログラムです:
システムを使用する; System.Collections.Genericを使用します。System.ComponentModel.Compositionを使用します。System.ComponentModel.Composition.Hostingを使用します。System.Reflectionを使用します。
namespace zTestConsole
{
public interface ISimple
{
string Message { get; }
}
[Export("SimpleHello",typeof(ISimple))]
public class SimpleHello : ISimple
{
[Export("Message")]
public string Message
{
get { return "Silverlight rocks!"; }
}
}
[Export("SimpleBello",typeof(ISimple))]
public class SimpleBello : ISimple
{
[Export("Message")]
public string Message
{
get { return "C# rocks!"; }
}
}
public class SimpleMultiCat
{
[ImportMany("Message")]
public IEnumerable<string> Messages { get; set; }
}
public class SimpleCat
{
[Import("SimpleHello")]
public ISimple simple { get; set; }
}
class Program
{
private static CompositionContainer container;
static void Main(string[] args)
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
SimpleMultiCat cats = new SimpleMultiCat();
SimpleCat cat = new SimpleCat();
Program.container = new CompositionContainer(catalog);
try
{
Program.container.ComposeParts(cats);
foreach (string message in cats.Messages)
{
Console.WriteLine(message);
}
}
catch (CompositionException ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine();
try
{
container.ComposeParts(cat);
Console.WriteLine(cat.simple.Message);
}
catch (CompositionException ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}