lambda non static C#
本文关键字:static non lambda | 更新日期: 2023-09-27 18:24:58
我正在尝试使用lambda函数将操作处理程序动态绑定到UWP中的单选按钮:
private void populateMenu(ListBar lb)
{
foreach (var item in lb.Groups)
{
leftMenuStackBar.Children.Add(ListBar.rbGrp(item));
foreach (var LItem in item.Items)
{
var radioButton = ListBar.rb(LItem);
radioButton.Click += (o, i) =>
{
loadFromMenuClick(LItem.Transl, frame);
};
leftMenuStackBar.Children.Add(radioButton);
}
}
编译器说函数"loadFromMenuclick"必须是静态的。在这个功能中,我想使用帧导航功能:
public void loadFromMenuClick(string test, Frame f)
{
Frame.Navigate(typeof(Themes.AbstractView), test);
}
我给了它一个"Frame f"对象,因为我以前有过这个错误,但按照导航功能的工作方式,最好使用静态Frame。navigate而不是f.navigate。
当我尝试使用Frame.Navigation时,我会收到"非静态字段、方法或属性'Frame.Navigate(Type,object)'需要对象引用"错误。。。
我该如何让它发挥作用?
问题出在"测试"字符串中。在调用事件处理程序时,没有对LItem.Transl
的引用。由于我们不知道该项中有什么以及它是如何链接到RadioButton
的,因此我将继续回答,假设LItem.Transl
的字符串值也存储在RadioButton
的Tag
属性中。这是附加事件处理程序的循环的代码
var radioButton = ListBar.rb(LItem);
radioButton.Tag = LItem.Transl; // maybe this is in .Text as well?
radioButton.Click += (o, i) => loadFromMenuClick(o);
您的功能将是:
private void loadFromMenuClick(object sender)
{
RadioButton radioButton = (RadioButton) sender;
frame.Navigate(typeof (Themes.AbstractView), radioButton.Tag?.ToString());
}