没有附加调试器时,Silverlight数据绑定会中断

时间:2012-01-19 15:13:05

标签: silverlight

好吧,有点奇怪 - 它可能很简单,因为我对Silverlight很新!

我有一个具有以下属性的对象: -

private int targetID = NULL_TARGET_VALUE;
    [Display(Name="Target", Order=1)]
    [Required]
    public int TargetID
    {
        get
        {
            return targetID;
        }
        set
        {
            if (this.targetID != value)
            {
                this.ValidateProperty("TargetID", value);

                this.targetID = value;

                this.RaisePropertyChanged("TargetID");
            }
        }
    }

使用工具包中的DataForm创建此对象。我使用AutoGeneratingField事件将项目更改为组合框下拉列表,其中包含以下代码:

if (e.PropertyName == "TargetID")
        {
            ComboBox target = new ComboBox() { DisplayMemberPath = "Title", SelectedValuePath = "ItemID" };
            target.ItemsSource = TaskManager.Manager.GanttItemSource;
            var selectedItem = TaskManager.Manager.GanttItemSource.FirstOrDefault(p => p.ItemID == ParentTargetID);
            target.SelectedItem = selectedItem;
            e.Field.ReplaceTextBox(target, ComboBox.SelectedValueProperty, binding => binding.Converter = new TargetNullValueConverter());
            break;
        }

这确实会导致我的预期下降。在我的保存按钮事件中,我有以下代码:

if (registerForm.ValidateItem())
        {
            this.task.Save();
        }

如果将调试器附加到silverlight项目,则效果很好。如果不是那么ValidateItem返回false,因为它认为我添加了一个无效的目标(“输入格式不正确”是我得到的确切验证错误)。

任何想法真的很感激! (BTW只是为了确认在发布和调试构建模式中都会发生这种情况,只需附加或删除调试器就会导致这种情况发生)

1 个答案:

答案 0 :(得分:0)

该死,问题归结为autogeneratingfield事件中的这一行: -

e.Field.ReplaceTextBox(target, ComboBox.SelectedValueProperty, binding => binding.Converter = new TargetNullValueConverter());

这可以让它工作

                            e.Field.ReplaceTextBox(target, ComboBox.SelectedValueProperty);

这是有道理的,因为我处理的是int而不是对象。仍然不知道为什么它适用于附带的调试器!