C#和WPF:是否可以根据事件处理程序中的类型自动向下转发sender参数?

时间:2018-03-30 10:46:10

标签: c# wpf event-handling downcast

通常,我知道什么样的特定控件会引发某个事件,所以我可以在事件处理程序中通过手动向下传播它的sender参数来引用它(假设发送者是一个Button):< / p>

var refToSender = (Button)sender;

现在,如果由于任何原因我无法确定发送方的确切类型,是否可以进行自动向下转换而无需使用条件块?换句话说,是否有可能写出这样的东西:

var refToUnknownSender = (Magic_here)sender;

1 个答案:

答案 0 :(得分:-1)

你可以,但我很难理解为什么你会从中获益。 我会解释我的想法。 在您的处理程序中,您可以这样做:

Type t = sender.GetType();
var myvar = Convert.ChangeType(sender, t);

myvar现在是一个按钮或其他什么。 在您尝试在任何代码中使用它之前,这一切都很顺利。 因为如果你尝试使用依赖于这种类型的东西,比如:

string senderName = myvar.Name;

编译器不具备任何内容,因为它不知道senderName是什么类型,所以它不知道它有Name属性。

为了使用该类型编写代码,我无法看到以某种通用方式进行向下转换的重点。 如果您不知道该类型,那么您就无法做到。

所有这些对于使用MVVM的开发人员来说都是学术性的,因为任何事件处理程序都可能在行为中,并且您通常已经在viewmodel中拥有了属性类型。