Windows phone 7 处理用户控件在其保留页中的事件';s代码隐藏

Windows phone 7 处理用户控件在其保留页中的事件';s代码隐藏,windows-phone-7,silverlight-4.0,Windows Phone 7,Silverlight 4.0,我正在寻找以下情况的解决方案 在我的应用程序中,我有一个页面,比如page1,我在page1中放置了一个用户控件。我的要求是我需要在page1的代码后面获得用户控件中使用的按钮的点击事件。如何在windows phone/silverlight中实现同样的效果。有两种方法, 最简单的方法是双击演示布局上的按钮 或 在XML中添加onCLick= 这样做会弹出菜单选择新事件。点击这个按钮,你的事件按钮点击应该在代码后面 <button name="b1" onClick="button1_C

我正在寻找以下情况的解决方案


在我的应用程序中,我有一个页面,比如page1,我在page1中放置了一个用户控件。我的要求是我需要在page1的代码后面获得用户控件中使用的按钮的点击事件。如何在windows phone/silverlight中实现同样的效果。

有两种方法, 最简单的方法是双击演示布局上的按钮

在XML中添加onCLick= 这样做会弹出菜单选择新事件。点击这个按钮,你的事件按钮点击应该在代码后面

<button name="b1" onClick="button1_Click()"/> <!--this is what ur XAML will look like -->
1.第一个也是正确的方法: (如果您知道MVVM模式)将由您控制,比如说
MyControl
,以公开类型
ICommand
的DependencyProperty,名为MyControlButtonClickCommand

Xaml:

您可以按如下方式使用UserControl:

<phone:PhoneApplicationPage>

    <namespace:MyControl MyControlButtonClickCommand="{Binding ControlButtonCommand}" />

</phone:PhoneApplicationPage>

其中
ControlButtonCommand
是ViewModel(自定义对象)的属性,位于
页面的数据上下文中

2.还有一种更简单、更肮脏的方式,我不鼓励你去: 就像您公开
MyControlButtonClickCommand
依赖属性一样,您可以公开事件
MyControlButtonClick
并在页面的xaml中订阅它,而不是公开它。在用户控件的代码内部,您应该订阅其按钮的
单击
事件,并启动自己的
mycontrolbutton单击
事件


希望这将对您有所帮助。

对于UserControl,您可以创建一个界面,您的Page1.xaml.cs将实现该界面

public partial Class SomeControl : UserControl
{
    private OnButtonClick button_click;

    public interface OnButtonClick
    {
        void someMethod();   // generic, you can also use parameters to pass objects!!
    }

    // Used to add interface to dynamic controls
    public void addButtonClickInterface(OnButtonClick button_click)
    {
        this.button_click = button_click;
    }

    // Buttons UserControlled Click
    private void ButtonClick(object sender, RoutedEventArgs e)
    {
        if(button_click != null)
        {
            button_click.someMethod();  
        }
    }

}
下面是如何实现和使用它

public partial class Page1 : PhoneApplicationPage, SomeControl.OnButtonClick
{

    public Page1()
    {
        InitializeComponent()

        // for a new Control
        SomeControl cntrl = new SomeControl();
        cntrl.addButtonClickInterface(this);

        // or for a control in your xaml
        someControl.addButtonClickInterface(this);
    }

    public void someMethod()
    {
        // Here is where your button will trigger!!
    }

}

要处理按钮单击事件,需要为该按钮注册一个单击事件。上面的方法使用do-so,它将生成一个类似“Button1_clicked()”的存根,在这个方法中,您将处理event@Harshit你不明白他的问题。他想在页面后面的代码中处理用户控件的按钮点击,而不是用户控件本身。@nkchandra好的,我得到了上面发布的答案。我需要这个,请你再添加一些代码,以便我可以遵循你的流程。在何处添加此
如何将viewModel命令绑定到usercontrol的按钮单击?请帮助新加入wpf windows phone。。。
<phone:PhoneApplicationPage>

    <namespace:MyControl MyControlButtonClickCommand="{Binding ControlButtonCommand}" />

</phone:PhoneApplicationPage>
public partial Class SomeControl : UserControl
{
    private OnButtonClick button_click;

    public interface OnButtonClick
    {
        void someMethod();   // generic, you can also use parameters to pass objects!!
    }

    // Used to add interface to dynamic controls
    public void addButtonClickInterface(OnButtonClick button_click)
    {
        this.button_click = button_click;
    }

    // Buttons UserControlled Click
    private void ButtonClick(object sender, RoutedEventArgs e)
    {
        if(button_click != null)
        {
            button_click.someMethod();  
        }
    }

}
public partial class Page1 : PhoneApplicationPage, SomeControl.OnButtonClick
{

    public Page1()
    {
        InitializeComponent()

        // for a new Control
        SomeControl cntrl = new SomeControl();
        cntrl.addButtonClickInterface(this);

        // or for a control in your xaml
        someControl.addButtonClickInterface(this);
    }

    public void someMethod()
    {
        // Here is where your button will trigger!!
    }

}