I have a custom control shows a customer info with an itemscontrol shows this customer's invoices. within the itemscontrol, I have button, in my code behind I want to wire the button's click event to my host window, but do now know how.
//public event RoutedEventHandler ViewDetailClick;
public static readonly RoutedEvent ButtonViewClickEvent = EventManager.RegisterRoutedEvent(
"ButtonViewClick",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(custitem));
public event RoutedEventHandler ButtonViewClick
{
add { AddHandler(ButtonViewClickEvent, value); }
remove {RemoveHandler(ButtonViewClickEvent, value);}
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
this.lstInv = GetTemplateChild("lstInv") as ItemsControl;
lstInv.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged);
}
private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
if (lstInv.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
lstInv.ItemContainerGenerator.StatusChanged -= ItemContainerGenerator_StatusChanged;
for (int i = 0; i < this.lstInv.Items.Count; i++)
{
ContentPresenter c = lstInv.ItemContainerGenerator.ContainerFromItem(lstInv.Items[i]) as ContentPresenter;
DataTemplate dt = c.ContentTemplate;
Grid grd = dt.LoadContent() as Grid;
Button btnView = grd.FindName("btnView") as Button;
if (btnView != null)
{
btnView.Click += new RoutedEventHandler(ButtonView_Click);
//btnView.Click+= delegate(object senderObj, RoutedEventArgs eArg)
//{
// if (this.ViewDetailClick != null)
// {
// this.ViewDetailClick(this, eArg);
// }
//};
}
}
private void ButtonView_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("clicked");
//e.RoutedEvent = ButtonViewClickEvent;
//e.Source = sender;
//RaiseEvent(e);
}
I succeed getting the btnView, then attach the click event, but the click event never get fired.
Thanks in advance -rockdale