【发布时间】:2017-10-20 01:36:41
【问题描述】:
在元素上使用事件时,我只需将 EventHandler 的名称写为字符串即可:<Button Click="OnButtonClick" ..>。更好的是,Visual Studio 会检查代码隐藏中是否真的存在这样的 EventHandler。 (这可能是 ReSharper 的一个功能,我不确定)
如何对添加到元素的 Func 执行相同的操作? (我不考虑使用转换器,因为我认为它需要运行时反射,这会减慢速度。我正在寻找像 EventHandler 这样的设计时解决方案)
我想要一个返回 Func 的 viewmodel 属性,并且我希望 XAML 将其视为事件处理程序,或类似的等价物。
【问题讨论】:
-
我做C#才十年,WPF才五年;你能帮我理解什么是“我添加到元素中的函数”吗?你是如何添加它的?
-
一个包含 Func 类型属性的类(它实际上可以是任何类型的委托)。简而言之,我的目标是具有返回类型的处理程序。
-
您不能直接将委托绑定到 XAML 属性 - 您必须将其包装在方法中(这就是事件处理程序)或使用带有 TypeConverter 的
{Binding }来转换 @ 987654323@ 到MethodInfo(IIRC - 虽然我不确定这是否真的有效)。理想情况下,您应该使用Command="{Binding }"而不是Click,但这是另一个讨论)。 -
顺便说一句,XAML 中的所有内容都使用运行时反射。不要担心调用 click 事件 的开销,除非您预计用户每秒点击数千次。你不能开箱即用地做你想做的事;你需要一个命令或附加的行为。那么,这是视图还是视图模型的属性?
-
@EdPlunkett 我也不想失去 EventHandlers 在 XAML 中的设计时检查。
标签: c# wpf xaml xamarin.forms resharper