将事件路由到其他用户控件

时间:2013-11-07 11:57:39

标签: c# wpf user-controls event-handling

我需要一些帮助。

我的窗户上有一个按钮。单击按钮时,我想将所采取的操作路由到已在其他usercontrol中创建的事件。这些用户控件嵌入在窗口本身中。

usercontrol中的事件是

public void Item_Checked(object sender, RoutedEventArgs e)
        {
               object selected = this.GetType().GetField("Person", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(this);
               this. PropertyGrid1.SelectedObject = selected;

        }
在窗口中创建的

按钮为:

<Button Content="clickme" Name="click" Grid.Column="2" Height="20" Width="50" Click="click_Click" />
窗口中的

按钮事件如下所示:

 private void click_Click(object sender, RoutedEventArgs e)

        {
         /// dosomething   
        }
有人可以帮助我吗?我想在按钮点击上调用Item_checked事件。

2 个答案:

答案 0 :(得分:1)

使用null值作为RoutedEventArgs进行调用,如下所示

Item_Checked(PropertyGrid1,null);

答案 1 :(得分:1)

这是编程中的常见问题。普遍接受的解决方案只是添加一个新方法,其中包含当前在Item_Checked事件处理程序中的内容,然后从处理程序和您可能想要的任何其他位置调用该方法:

UserControl

public void DoSomething()
{
    object selected = this.GetType().GetField("Person", 
        System.Reflection.BindingFlags.NonPublic | 
        System.Reflection.BindingFlags.Static).GetValue(this);
    this.PropertyGrid1.SelectedObject = selected;
}

public void Item_Checked(object sender, RoutedEventArgs e)
{
    DoSomething();
}

Window中(其中yourUserControl是对您UserControl的引用):

private void click_Click(object sender, RoutedEventArgs e)
{
    yourUserControl.DoSomething();  
}