0

我有一個LightSwitch屏幕,它由包含CustomControl的List組成。這個CustomControl有一組依賴屬性,通過TwoWay綁定綁定到實體上的屬性。將TwoWay綁定更改爲PropertyChanged回調中的綁定項目

在CustomControl上的依賴項屬性之一我有一個PropertyChangedCallback在LightSwitch頁面上執行一個方法。然後在列表綁定的項目集合上運行一些計算。

大多數情況下這很好,但是在某些情況下,計算在觸發它們的變化被推送到CustomControl上的TwoWay綁定的實體之前運行。我該如何解決這個問題?我需要確保在對TwoControl綁定中的CustomControl依賴屬性進行更改後,運行LightSwitch頁面中的代碼。

創建將CustomControl綁定:

 SetBinding(AxleNumberProperty, new Binding("Value.Number") { Mode = BindingMode.TwoWay }); 

依賴屬性的樣子:

 public static readonly DependencyProperty AxleNumberProperty = 
     DependencyProperty.Register("AxleNumber", typeof(int), typeof(AxleViewer), new PropertyMetadata((d, e) => ((AxleViewer)d).RecalculateSquare())); 

我的依賴屬性回調的樣子:

 private void RecalculateSquare() 
    { 
     IContentItem contentItem = (IContentItem)DataContext; 
     IScreenDetails screenDetails = contentItem.Screen.Details; 

     screenDetails.Dispatcher.BeginInvoke(() => screenDetails.Commands["UpdateSquare"].Execute()); 
    } 

然後內屏幕我有:

 partial void UpdateSquare_Execute() 
    { 
     // perform calculation on this.Axles 
    } 

回答

0

如果屬性有任何變化,那麼只執行您的計算代碼,您可以檢查propertychangedcall back方法。否則,刪除propertychangedcallback並將您的代碼放在Property的setter中。

乾杯! Vinod

+0

對不起,我不認爲你理解我的問題。我有兩個對象,每個都有一個屬性。對象A上的屬性1與TwoWay綁定到對象B上的屬性2綁定。當對象B上的屬性2發生更改時,PropertyChangedCallback會執行對象A上執行某些計算的方法,但此時屬性1可能有或沒有已更新對屬性2所做的更改。清除? :) – 2012-07-10 09:36:51

+0

當對象的屬性1被對象B的屬性2的兩種方式綁定時,它將會改變一次Property2被對象B改變。請問你有什麼問題我不認爲我已經理解你卡在哪裏了? – vinod8812 2012-07-12 07:28:13

+0

問題是在更新對象B的屬性2時,對象A *的屬性1未更新*在PropertyChangedCallback運行時。在回調中,我使用LightSwitch所需的Dispatcher,這會導致競爭條件,有時財產已更新,有時不會。我在問是否有辦法強制通過對象A的更新。 – 2012-07-12 10:27:22

相關問題