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)'需要对象引用"错误。。。

我该如何让它发挥作用?

lambda non static C#

问题出在"测试"字符串中。在调用事件处理程序时,没有对LItem.Transl的引用。由于我们不知道该项中有什么以及它是如何链接到RadioButton的,因此我将继续回答,假设LItem.Transl的字符串值也存储在RadioButtonTag属性中。这是附加事件处理程序的循环的代码

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());
}