Silverlight绑定值是错误的

时间:2012-04-04 11:58:00

标签: silverlight binding mvvm caliburn.micro

我有一个打开对话框的Silverlight页面。它是一个管理页面,其中包含一些通过Web服务与数据库通信的高级逻辑。对于Silverlight客户端,我们充分利用MVVM。第一次打开对话框,根据实现的逻辑,一切正常。

问题: 第二次时间打开对话框,我们的数据绑定设置器开始接收错误的值。

代码:

如何创建对话框:

MyPopupViewModel myPopup = new MyPopupViewModel();
Caliburn.Micro.Execute.OnUIThread(() => WindowManager.ShowDialog(myPopup));

最终得到错误值的绑定之一:

<ComboBox
    ItemsSource="{Binding YesNoItems}"
    SelectedValue="{Binding IsSynchronizing, Mode=TwoWay, Converter={StaticResource BooleanToYesNoConverter}}"
    />

我尝试了什么:

  • 我在setter中加入了断点。这就是我意识到逻辑是正确的,但是第二次打开时用其他值调用setter。

  • 我发现吸气者在{1,第2,第3}次打开时被称为{1,2,1}}。

  • 我确保每次都初始化对话框。也许Caliburn-micro以某种方式缓存旧版本,但它显然不会长时间缓存它,因为它在第三次打开时再次正常工作。

1 个答案:

答案 0 :(得分:0)

通过在代码隐藏中的对话框View的构造函数中添加以下装饰器来解决它。我已经在ViewModel中找到了装扮器,但View显然也需要它。

PartCreationPolicy(CreationPolicy.NonShared)]

一位同事帮我通过破坏点找到了这个,然后为每个实例设置了一个ID。这样我们就证明有几个例子。非常实用。所以需要告诉Views每次重新创建而不是重复使用。

最终的代码隐藏看起来像这样:

[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class MyPopupView
{
    public MyPopupView()
    {
        InitializeComponent();
    }
}