在WPF PRISM(MEF)应用程序中,我使用RuleAppContainer.RuleApp.Rules
的链式绑定(不知道我是否正确引用了它),如下所示。
查看
<TreeView ItemsSource="{Binding RuleAppContainer.RuleApp.Rules}">
</TreeView>
现在,启动应用程序后,RuleAppContainer
单例对象由MEF容器创建,而RuleApp
属性在开始时为null。稍后,通过调用RuleAppContainer内部的AddRuleApp方法加载RuleApp
时,它不会在TreeView上反映(重新绑定)。
ViewModel
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class ViewModel : BindableBase
{
private RuleAppContainer _ruleAppContainer;
public RuleAppContainer RuleAppContainer
{
get { return _ruleAppContainer; }
protected set { SetProperty(ref _ruleAppContainer, value); }
}
}
模型(简化)定义
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class RuleAppContainer : BindableBase
{
private RuleApp _ruleApp;
public RuleApp RuleApp
{
get { return _ruleApp; }
private set { SetProperty(ref _ruleApp, value); }
}
public void AddRuleApp(RuleApp ruleApp)
{
RuleApp = ruleApp;
}
}
public class RuleApp : ObjectBase
{
public ObservableCollection<RuleFolder> Rules =>
new ObservableCollection<RuleFolder>(GetRuleElements());
public IEnumerable<RuleFolder> GetRuleElements()
{
foreach (var x in Entities.Where(x => x.RuleElements != null))
yield return x.RuleElements;
IEnumerable<RuleFolder> GetContextRuleElements(IEnumerable<EntityItem> items)
{
foreach (var item in items)
if (item.RuleElements != null)
yield return item.RuleElements;
}
foreach (var e in Entities)
foreach (var f in GetContextRuleElements(e.Items))
yield return f;
if (_rules.Count > 0)
{
var ruleFolder = _rules[0];
yield return ruleFolder;
}
}
}
我认为通过创建一个简单的WPF应用程序进行验证,它应该可以正常工作。
可能是什么原因?