我正在创建一个按钮(不是使用 xaml,因为它是一组按钮,应该根据特定需求动态创建,而不是一直存在)。当您想要告诉按钮要做什么时,您将向单击事件添加一个方法,如下所示:
btn.Click += b_ClickMethod;
并且b_clickMethod具有以下签名:
private void b_ClickMethod(object sender, RoutedEventArgs e)
我的问题是,如何(或者即使我实际上可以)将某个对象作为发送者传递,以便将信息传递给该方法。如果这个对象已经在其他地方设置,那么它代表什么?
我通常将信息从对象获取到其事件处理程序的方式是使用其DataContext
。如果这对您来说是一个选择(很难说它是否是),这是一件非常容易的事情。如果设置了按钮的DataContext
(您可以轻松地从代码隐藏中执行此操作),则可以像这样访问它:
private void b_ClickMethod(object sender, RoutedEventArgs e)
{
// Let's say you're trying to pass a Car-object
var car = sender.DataContext as Car;
// Manipulate away.
}
设置数据上下文的方式很简单:
CarViewModel someViewModel = new ViewModel(); // or whatever
Car someCarObject = someViewModel.getSomeCar(); // basically - find the object you would like to send.
btn.DataContext = someCarObject;
希望这有帮助。作为尾注,您可能需要重新考虑创建这样的按钮。如果在某些情况下只需要按钮,则只需将这些按钮的Visibility
参数设置为 Visibility.Hidden
,则会有更干净的代码。