2009-09-30 57 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的屬性,模式是雙向的。這將激活您的確定取消按鈕。