我有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 ......?
答案 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();你可以查看我的程序并纠正我,如果我错了或说我是对的......就像我说的,我认为这是解决方案,但我不是百分百肯定。