好吧,有点奇怪 - 它可能很简单,因为我对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只是为了确认在发布和调试构建模式中都会发生这种情况,只需附加或删除调试器就会导致这种情况发生)
答案 0 :(得分:0)
该死,问题归结为autogeneratingfield事件中的这一行: -
e.Field.ReplaceTextBox(target, ComboBox.SelectedValueProperty, binding => binding.Converter = new TargetNullValueConverter());
这可以让它工作
e.Field.ReplaceTextBox(target, ComboBox.SelectedValueProperty);
这是有道理的,因为我处理的是int而不是对象。仍然不知道为什么它适用于附带的调试器!