2010-10-06 85 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

相关问题