lambda 非静态 C#
lambda non static C#
我正在尝试使用 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" 必须是静态的。在这个函数中我想使用 Frame.Navigate 函数:
public void loadFromMenuClick(string test, Frame f)
{
Frame.Navigate(typeof(Themes.AbstractView), test);
}
我给了它 "Frame f" 对象,因为我之前有这个错误,但是导航功能的工作方式,最好使用静态 Frame.Navigate 而不是 f.Navigate.
当我尝试使用 Frame.Navigate 时,出现 "An object reference is required for the non-static field, method or property 'Frame.Navigate(Type, object)'" 错误...
如何让它工作?
问题出在您的 "test" 字符串中。在您的事件处理程序被调用的那一刻,没有对 LItem.Transl
的引用。由于我们不知道该项目中的内容以及它如何链接到 RadioButton
,我将假设 LItem.Transl
的字符串值也存储在 Tag
中继续我的回复] 属性 的 RadioButton
。这是您附加事件处理程序的循环代码
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());
}
我正在尝试使用 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" 必须是静态的。在这个函数中我想使用 Frame.Navigate 函数:
public void loadFromMenuClick(string test, Frame f)
{
Frame.Navigate(typeof(Themes.AbstractView), test);
}
我给了它 "Frame f" 对象,因为我之前有这个错误,但是导航功能的工作方式,最好使用静态 Frame.Navigate 而不是 f.Navigate.
当我尝试使用 Frame.Navigate 时,出现 "An object reference is required for the non-static field, method or property 'Frame.Navigate(Type, object)'" 错误...
如何让它工作?
问题出在您的 "test" 字符串中。在您的事件处理程序被调用的那一刻,没有对 LItem.Transl
的引用。由于我们不知道该项目中的内容以及它如何链接到 RadioButton
,我将假设 LItem.Transl
的字符串值也存储在 Tag
中继续我的回复] 属性 的 RadioButton
。这是您附加事件处理程序的循环代码
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());
}