属性链接绑定在WPF MVVM中不起作用

时间:2018-07-17 11:45:44

标签: c# wpf mvvm data-binding treeview

在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应用程序进行验证,它应该可以正常工作。

可能是什么原因?

0 个答案:

没有答案