Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在特定文件夹中创建类的实例_C#_Wpf - Fatal编程技术网

C# 在特定文件夹中创建类的实例

C# 在特定文件夹中创建类的实例,c#,wpf,C#,Wpf,我有一个带有几个视图类(XAML文件)的特定文件夹。 现在,我正在通过代码实例化这些: engineRoomView = new EngineRoomView() { DataContext = new ProcessViewModel() }; 然后再往下走: item = new TabItem(); item.Contents = engineRoomView; item.Name = "Engine Room"; views.Add(item); 我想要实现的是某种动态代码,用

我有一个带有几个视图类(XAML文件)的特定文件夹。 现在,我正在通过代码实例化这些:

engineRoomView = new EngineRoomView()
{
   DataContext = new ProcessViewModel()
};
然后再往下走:

item = new TabItem();
item.Contents = engineRoomView;
item.Name = "Engine Room";
views.Add(item);
我想要实现的是某种动态代码,用于在编程期间不知道每个视图的情况下,在特定文件夹中创建每个视图的一个实例

如果开发人员向该文件夹添加另一个xaml文件。然后在运行时创建这个

想象的东西,比如:

Foreach(file in folder)
{
   magicInstance = createInstanceFromFile(file);
   MainViewModel.addView(magicInstance);
}

这可能吗

如果我理解正确,可以使用内置Xaml阅读器将其存档。Xaml读取器可以读取Xaml文件,并将基于Xaml生成对象

请看这里:

如果我理解正确,可以使用内置Xaml阅读器将其存档。Xaml读取器可以读取Xaml文件,并将基于Xaml生成对象

请看这里:

听起来您有一个“父视图”,您希望为同一文件夹中的每个文件自动附加一个子视图

如果每个文件夹中的类具有与文件夹结构一致的命名空间,则此代码应允许您在同一文件夹中创建每个类的实例列表,作为从基类继承的示例实例(也可以轻松修改接口)

静态类NamespaceHelper
{
公共静态列表FindTypesInSameNameSpaces(对象实例)
{
字符串ns=instance.GetType().Namespace;
类型instanceType=instance.GetType();
List results=instance.GetType().Assembly.GetTypes().Where(tt=>tt.Namespace==ns&&
tt!=instanceType).ToList();
返回结果;
}
公共静态列表实例化etypesinsamenamespaceas(对象实例)
{
列表实例=新列表();
foreach(FindTypesInSameNameSpaces(实例)中的t类型)
{
if(t.IsSubclassOf(typeof(t)))
{
ti=(T)Activator.CreateInstance(T);
实例.添加(i);
}
}
返回实例;
}
}
只需调用
namespaceheloper.instancetypesinsamenamespaceas(instanceOfParentViewInSameFolder)
,遍历结果,并将它们添加到父级

Foreach(ViewBase v in NamespaceHelper.InstantiateTypesInSameNamespaceAs<ViewBase>(this))
{
   MainViewModel.addView(v);
}
Foreach(namespaceheloper.instancetypesinsamenamespaceas中的ViewBase v(this))
{
MainViewModel.addView(v);
}
听起来您有一个“父视图”,您希望为同一文件夹中的每个文件自动附加一个子视图

如果每个文件夹中的类具有与文件夹结构一致的命名空间,则此代码应允许您在同一文件夹中创建每个类的实例列表,作为从基类继承的示例实例(也可以轻松修改接口)

静态类NamespaceHelper
{
公共静态列表FindTypesInSameNameSpaces(对象实例)
{
字符串ns=instance.GetType().Namespace;
类型instanceType=instance.GetType();
List results=instance.GetType().Assembly.GetTypes().Where(tt=>tt.Namespace==ns&&
tt!=instanceType).ToList();
返回结果;
}
公共静态列表实例化etypesinsamenamespaceas(对象实例)
{
列表实例=新列表();
foreach(FindTypesInSameNameSpaces(实例)中的t类型)
{
if(t.IsSubclassOf(typeof(t)))
{
ti=(T)Activator.CreateInstance(T);
实例.添加(i);
}
}
返回实例;
}
}
只需调用
namespaceheloper.instancetypesinsamenamespaceas(instanceOfParentViewInSameFolder)
,遍历结果,并将它们添加到父级

Foreach(ViewBase v in NamespaceHelper.InstantiateTypesInSameNamespaceAs<ViewBase>(this))
{
   MainViewModel.addView(v);
}
Foreach(namespaceheloper.instancetypesinsamenamespaceas中的ViewBase v(this))
{
MainViewModel.addView(v);
}

您可以在运行时使用XamlReader.load(流)加载XAML文件;您只需要创建一个流来读取.xaml文件。如果名称空间一致,您可以使用反射来查找当前名称空间中的所有“视图”类,迭代它们,并将它们添加到列表中。您可以在运行时使用XamlReader.load(流)加载xaml文件;您只需要创建一个流来读取.xaml文件。如果名称空间是一致的,您可以使用反射来查找当前名称空间中的所有“视图”类,对它们进行迭代,并将它们添加到列表中。可能有一种方法,我会检查它。可能有一种方法,我会检查它。是的,您的理解似乎是正确的。希望你提供的例子能帮我解决这个问题。谢谢是的,看来你的理解是正确的。希望你提供的例子能帮我解决这个问题。谢谢