2009-09-30 34 views
0

我在写一个ChecklistBox控件,它是一个列表框,用于呈现列表中的CheckBoxes。然后我在DataForm的EditTemplate中使用这个控件。随着这种控制,我有两个文本框绑定到Dataform的DataContext的属性。Silverlight 3数据表单提交按钮未激活

作为参考,ChecklistBox有三个实现的属性...

  • 的ItemsSource - >在可能的项目清单,为您的对象集合。
  • ObjectCollection - >应该受到影响的对象的集合...在这种情况下考虑您的订单详细信息。
  • CheckboxContentTemplate - >这是下一步应该在列表中的复选框所示(通常,这是对象的只是文本,但它可以是任何东西。)

我正在运行到当我更改ObjectCollection时,Dataform的Commit按钮将不会激活。但是,如果我在程序执行过程中更改了edittemplate中任一文本框的文本,我的Commit按钮将激活。

任何想法?


@Shawn:

我有两个对象,用户&角色......

public class Users : INotifyPropertyChanged, IEditableObject 
{ 
public string firstname {get{...}set{...}} 
public string lastname {get{...}set{...}} 
public RoleCollection Roles {get{...}set{...}} 
} 

public class Role : INotifyPropertyChanged, IEditableObject 
{ 
public Guid Oid {get{...}set{...}} 
public string Code {get{...}set{...}} 
public string Name {get{...}set{...}} 
public string Description{get{...}set{...}} 
} 

public class RoleCollection:BulkObservableCollection<Role> 
{ 
} 

public class BulkObservableCollection<T>:ObservableCollection<T> 
{ 
public void AddRange(IList toAdd) 
{ 
... 
} 
} 

假设为arguement的缘故,上面的代码具有所有适当的结构来处理事件在INotifyPropertyChanged和IEditableObject中。当我去建立checklistbox时,我正在查看ObjectCollection(“user”.Roles.Where(item => Item.Oid == role.Oid).Count> 0;)来说明是否要初始检查该复选框或不。

我知道的事实是,当我取消选中并勾选这些框时,角色的“DataContext”正在被添加或从对象中移除,正如我追踪到的那样。我想以某种方式警告数据表单,当我从“角色”中删除一个对象时,它正在修改对象。

我试图从ObservableCollection中捕获CollectionChanged事件,然后发射一个“PropertyChanged(”Roles“)”事件,但这似乎并没有解决它。

回答

1

DataForm假定单个对象不是提交按钮的集合。你能解释一下你的绑定数据吗?

这可能是在你的AddRange中没有使用INotifyCollectionChanged接口吗? (从示例中无法看出)。否则,看起来你正在做正确的事情。

+0

我在上面进一步解释。这是否足够让你继续? Thx。 – 2009-10-02 16:02:49

+0

我有类似的问题,但我使用集合,所以这可能是我的问题...可惜,因为这就是我想要的。 – 2010-03-17 22:42:37

-2

检查您是否绑定对于绑定到dataform的属性,模式是双向的。这将激活您的确定取消按钮。