2010-10-06 90 views
0

我在IMultiValueConverter爲什麼沒有局部變量捕獲? C#閉合bahavior

public object Convert(object[] values ...) 
{ 
    return new Microsoft.Practices.Composite.Presentation.Commands.DelegateCommand<object>(
       delegate 
       { 
        foreach (ICommand cmd in values) 
        { 
         cmd.Execute(null); 
        } 
       }); 
} 

值參數爲2個命令對象寫這個轉換的代碼,但是當執行回調(WPF mulibinding)值陣列只包括空值。爲什麼?如何解決這個問題?

+0

'Microsoft.Practices.Composite。 Presentation.Commands.DelegateCommand ' - 我很高興我不必編寫.NET代碼... – Skilldrick 2010-10-06 13:02:24

+6

您知道他只是沒有使用using指令來顯示他在說什麼課程關於?通常,它只是'返回新的DelegateCommand [...]'。 – Femaref 2010-10-06 13:04:36

+0

您是否檢查並確認您是否正確地綁定了這些值?該代碼可能會有所幫助 – Viv 2010-10-06 13:06:38

回答

6

在你的方法沒有什麼是改變values的價值,所以在這種情況下,它彷彿變量values被直接捕獲。關於被捕獲的變量的正常注意事項不適用 - 當然,除非你已經有更多的代碼在你沒有告訴我們的方法中...

請注意,如果有其他更改,值在數組中返回,但在委託執行之前,這些更改仍將可見。如果你不希望出現這種情況,你應該自己克隆陣列:

public object Convert(object[] values) 
{ 
    object[] copy = (object[]) values.Clone(); 
    return new DelegateCommand<object>(
       delegate 
       { 
        foreach (ICommand cmd in copy) 
        { 
         cmd.Execute(null); 
        } 
       }); 
} 

這不是從你的問題是很清楚發生了什麼,但我希望這將有助於...

+0

喬恩,太棒了!有用。謝謝你的所有熟練的答案。 – sfedorov1982 2010-10-06 13:10:19

+1

心理編譯器錯誤:「分配了本地變量'副本並且從未讀過」 – 2010-10-06 13:11:05

+0

@Ben:哎呀,謝謝,修正:) – 2010-10-06 13:13:31

相關問題