1

我有一个 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 时会使用其他值调用它。

  • 我发现吸气剂被称为 {1, 2, 1} 次 {1st, 2nd, 3rd} 次它们被打开。

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

4

1 回答 1

0

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

PartCreationPolicy(CreationPolicy.NonShared)]

一位同事通过断点帮助我找到了这一点,然后为每个实例设置了一个 ID。这样我们就证明了有几个例子。很实用。因此,需要告知 Views 每次都重新创建而不是重复使用。

最终的代码隐藏如下所示:

[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class MyPopupView
{
    public MyPopupView()
    {
        InitializeComponent();
    }
}
于 2012-04-16T10:14:30.643 回答