gpt4 book ai didi

PRISM 4 - RegisterViewWithRegion 和自定义导出属性

转载 作者:行者123 更新时间:2023-12-04 17:23:01 26 4
gpt4 key购买 nike

我正在使用带有 MEF 扩展和 MVVM 模式的 Prism 4。在模块初始化期间,我调用 RegisterViewWithRegion(RegionNames.MyRegion, typeof(MyView)) ,当 View 构造如下时,它可以完美运行:

[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class MyView : UserControl
{
public MyView()
{
....

View 被注册,一切都很好。一旦我将导出更改为自定义导出属性,就再也找不到 View 了,尽管它仍在容器中。此自定义导出属性取自 Stock Trader RI:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
[MetadataAttribute]
public class ViewExportAttribute : ExportAttribute, IViewRegionRegistration
{
public ViewExportAttribute()
: base(typeof(object))
{ }

public ViewExportAttribute(string viewName)
: base(viewName, typeof(object))
{
ViewName = viewName;
}

public string RegionName { get; set; }
public string ViewName { get; set; }

}

界面是
public interface IViewRegionRegistration
{
string RegionName { get; }
string ViewName { get; }
}

通过将导出属性更改为
[ViewExport(ViewName = "MyView", RegionName = RegionNames.MyRegion)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class MyView : UserControl
{
public MyView()
{
....

调用 RegisterViewWithRegion 时会引发错误:尝试获取 MyView 类型的实例时发生激活错误,键“”

有什么建议吗?我整天都在看这部分代码,但没有找到解决方案。

最佳答案

改天,另一种方式......即使我对 PRISM 的了解有限,我也会尝试回答我的问题。换句话说:我还在学习。
AutoPopulateExportedViewsBehavior 使用从 Stock Trade RI 获取的自定义导出属性.此行为通过检查区域名称的导出属性自动将 View 添加到其区域,然后将 View 添加到相应的区域。但是所有具有此自定义属性的 View 现在都有一个契约(Contract)名称“对象”,这使得 ServiveLocator 无法找到它们。此自定义属性适用于具有固定区域/ View 链接的方案。
使用自定义导出属性时的解决方案是获取“对象”类型的所有导出和适当的元数据:

MyView view;
var myList = container.GetExports<object, IViewRegionRegistration>();
foreach (Lazy<object, IViewRegionRegistration> lazy in myList)
{
if (lazy.Metadata.ViewName == "MyView")
{
view = lazy.Value as MyView;
region.Add(view);
break;
}
}

但我认为在使用 ViewInjection 和 Prism Navigation 时,最好只使用默认的 [Export] 属性,这样一切都会顺利进行。

关于PRISM 4 - RegisterViewWithRegion 和自定义导出属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com