0

我有 5 个 ViewModel。每个视图都有自己的虚拟机。当我启动程序时,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 丢失...?

4

2 回答 2

0

您显示的代码没有任何问题,因此我怀疑计算方法。剖析它。

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

于 2013-04-23T12:30:33.227 回答
0

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

MyContent.Content = new FirstView(); 

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

FirstView fw; 

并在 MainViewModel 的构造函数中说

fw = new FirstView();

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

MyContent.Content = fw;

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

于 2013-04-23T16:32:07.120 回答