没有框架的Composite WPF模块中的命令处理

时间:2011-03-16 17:42:35

标签: wpf mvvm prism

我正在应用程序中创建一个模块,我需要创建一个复杂的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,但可以使用该命令传递参数。例如,所有按钮都将使用一些字符串值触发相同的命令,该字符串值唯一标识单击的按钮?

1 个答案:

答案 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
相关问题