我正在编写一个ChecklistBox控件,它是一个列表框,用于在列表中呈现CheckBoxes。然后我在DataForm的EditTemplate中使用这个控件。除了这个控件之外,我还有两个文本框绑定到Dataform的DataContext的属性。
作为参考,ChecklistBox有三个已实现的属性......
我遇到的是当我更改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“)”事件,但似乎没有解决它。
答案 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。这将激活您的确定取消按钮。