被叫两次

时间:2013-09-17 18:53:25

标签: .net wpf binding inotifypropertychanged

拥有一个属于公共财产的FlowDocument 它受XAML束缚 创建
是相当昂贵的 需要动态创建它,因为任何一些输入可能已经改变了 它也很大 - 不想持有副本 忘记复制或引用是否实际存在 - 创建成本高 - 一个带有大量格式的大循环 它是动态的 - 它是在每次调用时创建的

此公共属性未在后面的代码中引用 在XAML中,它只绑定一次

NotifyPropertyChanged仅被调用一次 但我看到两个要求得到的电话 堆栈跟踪根本不会改变,所以我怀疑它是来自XAML的两次调用

我不想为NotifyPropertyChanged的一次调用创建两次FlowDocument 我该如何解决这个问题?

public FlowDocument DocFlow
{
    get
    {
        FlowDocument docFlowDocument = new FlowDocument();
        // expensive build docFlowDocument 
        return docFlowDocument;
    }
}

持有参考不是解决方案

private FlowDocument docFlow;

这是动态内容,任何数量的输入都可能已更改。

一种解决方案是将先前输入和先前输出的副本保存为页面级私有变量 然后比较所有当前输入,如果没有输入更改,则返回先前输出 输入和输出都很大,所以我宁愿不要复制 HighCore我知道引用不是副本。但是对先前输入和先前输出的单个引用是存储器。

我无法在一个非常简单的例子中重现这一点 真正的应用程序有框架和标签 我正在研究应用程序的缩小版本以重现问题。 我会继续努力,但如果我不能重现这个问题,我会删除这个问题。

0 个答案:

没有答案