Silverlight 3数据形式提交按钮未激活

时间:2009-09-30 17:47:17

标签: silverlight-3.0

我正在编写一个ChecklistBox控件,它是一个列表框,用于在列表中呈现CheckBoxes。然后我在DataForm的EditTemplate中使用这个控件。除了这个控件之外,我还有两个文本框绑定到Dataform的DataContext的属性。

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

  • ItemsSource - >对象集合的可能项目列表。
  • ObjectCollection - >应受影响的对象集合...在此方案中考虑您的订单详细信息。
  • CheckboxContentTemplate - >这是应该在列表中的复选框旁边显示的内容(通常,这只是对象的文本,但它可以是任何内容。)

我遇到的是当我更改ObjectCollection时,Dataform的Commit按钮不会激活。但是,如果我在程序执行期间更改了edittemplate中任一文本框的文本,我的提交按钮就会激活。

有什么想法吗?


@Shawn:

我有两个对象,User&角色...

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)
{
...
}
}

让我们说为了争论,上面的代码具有处理INotifyPropertyChanged和IEditableObject中事件的所有适当结构。当我去构建checklistbox时,我正在查看ObjectCollection(“user”.Roles.Where(item =&gt; Item.Oid == role.Oid).Count&gt; 0;)来判断是否要最初选中复选框。

我知道事实上,当我取消选中并选中复选框时,正在跟踪对象中添加或删除角色的“DataContext”。我想以某种方式警告数据形式,当我从“角色”中删除一个对象时,它正在改变对象。

我尝试从ObservableCollection捕获CollectionChanged事件,然后触发“PropertyChanged(”Roles“)”事件,但似乎没有解决它。

3 个答案:

答案 0 :(得分:1)

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

可能是你的AddRange yuo没有使用INotifyCollectionChanged接口吗? (从例子中无法分辨)。否则看起来你做的是正确的事情。

答案 1 :(得分:0)

我使用silverlight 4和RIA serivces也有同样的想法。

我解决了安装WCF RIA Services Service Pack 1并为WCF RIA Services SP1重新安装WCF RIA Services Toolkit的问题。

可在以下位置找到这两个安装程序:http://www.silverlight.net/getstarted/riaservices/

指向WCF RIA服务SP 1的直接链接:http://go.microsoft.com/fwlink/?LinkId=205085 直接链接到WCF RIA Services SP1的WCF RIA Services工具包:http://go.microsoft.com/fwlink/?LinkID=205088

答案 2 :(得分:-2)

检查绑定到dataform的属性的绑定模式是否为twoway。这将激活您的确定取消按钮。