我正在应用程序中创建一个模块,我需要创建一个复杂的UI。由于复杂性,我决定使用UI的用户控件。
由于这种复合性,我面临着一些挑战。有一个usercontrol,可以包含另一个用户控件。
<MainWindow>
<UserSelectionUserControl>
<Button Command="SelectFirstChild/>
<Button Command="SelectSecondChild/>
<Button Command="SelectThirdChild/>
</UserSelectionUserControl>
<MainUserControl>
<ChildUserControl/>
</MainUserControl>
</MainWindow>
有几个ChildUserControls。在运行时,我必须根据用户按钮单击在MainUserControl中附加ChildUserControl。
我的问题是 - 如何有效地进行消息传递?我不能使用event agggregation / unity,因为我只是在一个大型应用程序中执行一个模块。我可以使用RoutedCommand,但可以使用该命令传递参数。例如,所有按钮都将使用一些字符串值触发相同的命令,该字符串值唯一标识单击的按钮?
答案 0 :(得分:1)
是的,您可以在命令中使用参数。在UserControls声明中,使用CommandParameter属性绑定或定义要发送到命令的数据。您的Command声明必须提供一个按值传递的对象。
<Button Content="Browse" Command="{Binding BrowseCommand}" CommandParameter="Image"/>
-OR -
<Button Content="Browse" Command="{Binding BrowseCommand}" CommandParameter="{Binding SelectedItem, ElementName=listBox}"/>
在我试图限制框架使用的应用程序中,我使用MVVMFoundation,我的命令属性和命令方法如下所示:
Private _cmdBrowseCommand As ICommand
Public ReadOnly Property BrowseCommand() As ICommand
Get
If _cmdBrowseCommand Is Nothing Then
_cmdBrowseCommand = New RelayCommand(Of Object)(AddressOf BrowseExecute)
End If
Return _cmdBrowseCommand
End Get
End Property
Private Sub BrowseExecute(ByVal param As Object)
If TypeOf(param) is PannableImage Then
'Code removed for brevity
End If
End Sub