Mvvm - 更新绑定需要太长时间

时间:2013-04-23 11:02:14

标签: performance mvvm binding

我有5个ViewModels。每个视图都有自己的VM。当我启动程序时,ViewModel会更改绑定,即

private string _bruttolohn;
public string Bruttolohn
{
    get { return _bruttolohn; }
    set
    {
        if (value != null)
        {
            if (value != _bruttolohn)
            {
                _bruttolohn = value;
                Calculate();
                RaisePropertyChanged(() => Bruttolohn);
            }
        }


    }
}

Bruttolohn =我用来计算和设置新值的一些值。我有~100个其他属性,都使用Binding。如果我启动该程序,计算很好,并且工作得很快!但是当我更改视图时(所有视图都在ContentControl中。如果我单击一个按钮,视图将被更改为:MyContent.Content = new FirstView();)。现在问题是:如果我将视图更改~30次,ViewModel需要设置绑定太长时间。为什么!? +如果我调试,我就在这一点:

RaisePropertyChanged(() => Bruttolohn);

弹出错误:缺少ObservableObject.cs ......?

2 个答案:

答案 0 :(得分:0)

您显示的代码没有任何问题,所以我怀疑是计算方法。简介。

如果Calculation()方法太长而无法发布,则它不应该在属性设置器中:)

答案 1 :(得分:0)

我想我找到了解决方案。每次我点击“FirstView”按钮,ContentControl的内容都会获得一个新的视图()!所以每次我点击按钮,它都会:

MyContent.Content = new FirstView(); 

这意味着仍有某种方式在后台打开视图...我无法自己解释,但如果我将视图全局设置为

FirstView fw; 

并在MainViewModel

的构造函数中说
fw = new FirstView();

我可以像这样轻松地分配ContentControl的内容(无需创建新视图):

MyContent.Content = fw;

您可以在此处下载测试应用:http://www65.zippyshare.com/v/89159114/file.html 它有一个MainView和2个视图。它显示了我的问题。如果单击Button“FirstView”,则contentcontrol的内容将为“FirstView.xaml”。它有2个文本框,它们计算总和并具有for循环(对于i = 0,i <500,i ++)。如果你在开始时计算正确,计算只需要约1秒,但如果你点击按钮“FirstView”~30次并尝试再次计算,计算需要超过10秒! 我认为这是因为MyContent.Content = new FirstView();你可以查看我的程序并纠正我,如果我错了或说我是对的......就像我说的,我认为这是解决方案,但我不是百分百肯定。