Pro*_*ofK 2 c# wpf lambda delegates
我习惯于以明显不同的方式使用lambdas.当我尝试定义a时DelegateCommand,我必须访问该命令的封闭类型的非静态成员.例如:
public ICommand ShowViewCommand { get; set; } = new DelegateCommand<string>(v =>
{
var viewModel = new EditFormViewModel;
var ucType = Assembly.GetExecutingAssembly().GetType(v);
App.SetWindowView(viewModel, ucType);
},
v => true);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,在App.SetWindowView调用中,App有一个红色的波浪形下划线,并且在它上面盘旋时,我被告知:
无法
App在静态上下文中访问非静态属性.
这不是我在使用lambda用于闭包时习惯的行为.这有什么不同?
您正在尝试访问自动实现的属性初始值设定项中的实例成员.这就像在字段初始化程序中尝试这样做.基本上,您this甚至不能在初始化程序中隐式引用,甚至不能在lambda表达式中引用.相反,您需要在构造函数中执行此操作:
public ICommand ShowViewCommand { get; set; }
public Foo() // Replace with your class name
{
ShowViewCommand = v => new DelegateCommand<string>(v =>
{
var viewModel = new EditFormViewModel;
var ucType = Assembly.GetExecutingAssembly().GetType(v);
App.SetWindowView(viewModel, ucType);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |