我很难使用 GalaSoft.MvvmLight.RelayCommand。一切正常,直到我尝试访问关闭。我没有收到任何错误或日志输出。
此代码正在运行:
for (int i = 0; i < 3; i++)
{
var iTemp = i;
var command = new RelayCommand(() =>
{
Debug.WriteLine("executed");
Debug.WriteLine(this);
// Debug.WriteLine(iTemp);
});
Commands[i.ToString()] = command;
children.Add(dataTemplateCreator.BuildButtonWithCommand(0, gridRow, $"Commands[{i}]", i.ToString()));
gridRow++;
}
一旦我删除注释,命令就不再执行。
有没有人见过这种行为?
我也试过更简单的
作品:
Execute = new RelayCommand(() =>
{
Value += 3;
});
停止工作:
var incValue = 3;
Execute = new RelayCommand(() =>
{
Value += incValue;
});
最佳答案
您无疑已经解决了这个问题或继续前进,但您的问题是垃圾收集。
问题在 this Stack Overflow answer 中描述解决方案在此 MVVMLight documentation item 中有所描述.
简而言之:您传递给 RelayCommand
的命令操作和启用功能用弱引用存储,所以除非除了 RelayCommand
之外的东西捕获它们,它们将在某个时候被垃圾收集。解决方法是使用keepTargetAlive
如果您的操作或启用函数是闭包,则构造函数参数。
关于wpf - GalaSoft MvvmLight RelayCommand 在访问闭包时停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32516460/