2015-03-19 102 views
2

我在這裏有一個WPF綁定問題。綁定到可觀察子類集

以下設置:

我有有一個名字和子項的的ObservableCollection(還有個叫步驟類)類(ActionService)。一個步驟有一個標誌,顯示該步驟是否已完成(IsDone)。

我將表單綁定到ActionService並顯示所有類型的東西。

一切工作正常,我只是在我的片段中的關鍵部分。

現在我需要一件事,我無法工作。我想通過綁定知道ActionService有多少個步驟已打開(IsDone == false)。我通過其中一個步驟打開一個孩子表格並更改IsDone-State,母親表格應該即時獲得新的計數。

而且我啞得到的方式;-)

感謝您的幫助或最佳實踐正確的解決方案。

public class ActionService : BaseObject 
 
{ 
 
\t public ActionService() 
 
\t { 
 
\t } 
 

 
\t private String name; 
 
\t public String Name 
 
\t { 
 
\t \t get { return this.name; } 
 
\t \t set 
 
\t \t { 
 
\t \t \t this.name = value; 
 
\t \t \t raisePropertyChanged("Name"); 
 
\t \t } 
 
\t } 
 

 
\t public ObservableCollection<Step> actionsteps; 
 
\t public ObservableCollection<Step> ActionSteps 
 
\t { 
 
\t \t get { return this.actionsteps; } 
 
\t \t set 
 
\t \t { 
 
\t \t \t this.actionsteps = value; 
 
\t \t \t raisePropertyChanged("ActionSteps"); 
 
\t \t } 
 
\t } 
 
\t 
 
} 
 

 
public class Step : BaseObject 
 
{ 
 
\t public Step() 
 
\t { 
 
\t } 
 
\t 
 
\t private String description; 
 
\t public String Description 
 
\t { 
 
\t \t get { return this.description; } 
 
\t \t set 
 
\t \t { 
 
\t \t \t this.description = value; 
 
\t \t \t raisePropertyChanged("Description"); 
 
\t \t } 
 
\t } 
 
\t 
 
\t private Boolean isdone; 
 
\t public Boolean IsDone 
 
\t { 
 
\t \t get { return this.isdone; } 
 
\t \t set 
 
\t \t { 
 
\t \t \t this.isdone = value; 
 
\t \t \t raisePropertyChanged("IsDone"); 
 
\t \t } 
 
\t } 
 
} 
 

 
public class BaseObject : INotifyPropertyChanged 
 
{ 
 
\t public event PropertyChangedEventHandler PropertyChanged; 
 
    
 
\t protected void raisePropertyChanged(String parPropertyName) 
 
\t { 
 
\t \t if (this.PropertyChanged != null) 
 
\t \t { 
 
\t \t \t this.PropertyChanged(this, new PropertyChangedEventArgs(parPropertyName)); 
 
\t \t } 
 
\t } 
 
}

回答

1

您可以在ActionService類中創建一個新的屬性:

public bool IsDone 
    { 
     get 
     { 
      return ActionSteps.Count(x => x.IsDone) == ActionSteps.Count; 
     } 
    } 

如果步在ActionSteps列表中的計數,其中IsDone屬性爲true等於ActionSteps列表中的步數,然後返回true,否則返回false。

要訂閱的步驟屬性更改事件,當你添加一個項目到集合中,你只需要訂閱的PropertyChanged事件:

//Create the item and subscribe to propertychanged. 
Step item = new Step(); 
item.PropertyChanged += item_PropertyChanged; 

//Add the item to the list. 
ActionSteps.Add(item); 

而且你的方法是這樣的:

void item_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     if (e.PropertyName == "IsDone") 
      raisePropertyChanged("IsDone"); 
    } 
+0

並聽取每個操作步驟IsDone屬性屬性發生變化,當它改變時,重新獲得IsDone – Muds 2015-03-19 08:52:14

+0

@Muds:我如何聽我的一個安裝前後一類的屬性更改事件vable集合?多數民衆贊成我的失蹤鏈接;-) – Mike 2015-03-19 08:59:00

+0

好,你可以先收聽集合中的集合更改事件,然後如果添加一個新的項目,新增加的項目的屬性更改+ +事件處理程序,如果項目被刪除,刪除該事件.. 說得通 ? – Muds 2015-03-19 09:03:59