我的ViewModel构造函数中的View需要一个DependencyProperty:
我的问题:MEF不会SatisfyImports()'因为它标有一个或多个ExportAttributes'(这是例外)
这是VIEW的代码结构:
public class MyView : UserControl
{
[Export(MethodTypes.ChartType)]
public Charts MyChartType
{
get
{
object k = GetValue(ChartTypeProperty);
Charts f = (Charts)Enum.Parse(typeof(Charts), k.ToString(), true);
return f;
}
set
{
SetValue(ChartTypeProperty, value);
}
}
[Import(ViewModelTypes.GenericChartViewModel)]
public object ViewModel
{
set
{
DataContext = value;
}
}
public MyView()
{
InitializeComponent();
if (!ViewModelBase.IsInDesignModeStatic)
{
// Use MEF To load the View Model
CompositionInitializer.SatisfyImports(this);
}
}
}
和VIEWMODEL:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(ViewModelTypes.GenericChartViewModel)]
public class GenericChartViewModel
{
[ImportingConstructor]
public GenericChartViewModel([Import(MethodTypes.ChartType)] Charts forChartType)
{
string test = forChartType.ToString();
}
}
请给我任何关于此的提示,或者建议通过mef传递参数的更好解决方案
在我的情况下,我现在只需要传递dependecyproperty's ...
由于
答案 0 :(得分:1)
你的工作并不是很好..你不能从ChartTypes中删除导出并将其手动传递给想要它的人吗?我认为viewmodel只是一个对它感兴趣的人..
答案 1 :(得分:0)
我设法通过了!
我使用:
代替默认构造函数中的代码 void MyView_Loaded(object sender, RoutedEventArgs e)
{
if (!ViewModelBase.IsInDesignModeStatic)
{
var catalog = new TypeCatalog(typeof(GenericChartViewModel));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
}
并且dependencyproperty值正确传播到ViewModel (必须在加载控件后执行此操作,否则属性将具有其默认值)
但是,如果有人可以,我将非常感激:
由于