我有一个UserControl,我们称之为myUC,它是我的WPF应用程序主窗口(myWindow)中的几个UserControls之一。myUC包含许多标准控件,其中一个是按钮,我们称之为myButton。
当我单击myButton时,我想执行myMethod(),它存在于myWindow的代码隐藏中。
问题是myUC根本不知道myWindow的存在,更不用说myMethod的存在了。
我如何发送这样的信息:‘嘿,myWindow,醒醒。刚刚点击了myUc上的myButton;请运行我的方法’?
发布于 2010-11-17 05:55:32
可以在窗口中创建命令,并将按钮的command属性设置为此命令的名称。单击该按钮将触发命令,而不需要引用父窗口。
发布于 2010-11-17 07:12:57
我最终不得不在VB中做的事情是:
为我的自定义命令创建一个新的公共类,因为将我的MainWindow类设置为公共是不可取的:
Public Class Commands
Public Shared myCmd As New RoutedCommand
End Class创建运行所需代码的Execute和CanExecute方法。这两个方法是在后面的MainWindow代码中创建的:
Class MainWindow
Private Sub myCmdCanExecute(ByVal sender As Object, ByVal e As CanExecuteRoutedEventArgs)
e.CanExecute = True
e.Handled = True
End Sub
Private Sub myCmdExecuted(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs)
//Do stuff here...
e.Handled = True
End Sub
End Class在MainWindow代码隐藏中创建命令绑定,并将两个处理程序方法添加到绑定中(这是C#和VB之间非常不同的部分):
Class MainWindow
Public Sub New()
// This call is required by the designer.
InitializeComponent()
//Add any initialization after the InitializeComponent() call.
//Create command bindings.
Dim cb As New CommandBinding(Commands.myCmd)
AddHandler cb.CanExecute, AddressOf myCmdCanExecute
AddHandler cb.Executed, AddressOf myCmdExecuted
Me.CommandBindings.Add(cb)
End Sub
End Class将新的自定义命令添加到UserControl上的按钮对象。使用自定义命令,这在XAML中似乎是不可能的,所以我必须在代码隐藏中完成。Commands类需要是公共的,以便可以在此UserControl中访问命令:
Public Class myUserControl
Public Sub New()
//This call is required by the designer.
InitializeComponent()
// Add any initialization after the InitializeComponent() call.
myButton.Command = Commands.myCmd
End Sub
End Class发布于 2010-11-17 05:55:19
我建议学习Routed Events和Routed Commands -这是他们应该做的事情。
https://stackoverflow.com/questions/4199312
复制相似问题