如何将xaml控制参数(如object,routedEventArgs)传递给Command?

时间:2015-05-27 18:44:36

标签: c# xaml events mvvm icommand

我试图找出如何使用你在典型事件处理程序中使用的控件参数,例如使用命令单击。我学会了如何使用命令运行方法,但是如果

  1. 当我的方法处于一个完全不同的类时,我想在UI中引用我的按钮?
  2. 如何获取按下的控件的参数?
  3. 这是我所拥有的,不确定它是否以其专业的方式使用它,希望是的:) 这是绑定到控件的类和命令:

    class Commands
    {
        private ICommand rectangleCommand;
    
        public ICommand RectangleCommand
        {
            get { return rectangleCommand; } 
        }
    
        public Commands()
        {
            rectangleCommand = new RelayCommand(makeItInvisible);
        }
    
        private void makeItInvisible()
        {
            MessageDialog dialog = new MessageDialog("Works");
            dialog.ShowAsync();
        }
    }
    

    这是我的RelayCommand类,它实现ICommand并使用Action委托指向Commands类中的方法:

    public class RelayCommand : ICommand
    {
        public event EventHandler CanExecuteChanged;
        private Action action;
    
        public RelayCommand(Action action)
        {
            this.action = action;
        }
    
        public bool CanExecute(object parameter)
        {
            return true;
        }
    
        public void Execute(object parameter)
        {
            action();
        }
    }
    

    这很好,但我还需要更多。 :) 这是我的XAML代码。我刚创建它来运用INottifyProperyChanged和ICommand接口。让我们假设:首先,我想传递给我创建的另一个页面对象,并在OnNavigatedTo方法中使用它。另一种情况是我想要更改已按下按钮的某些属性。在后面的代码中使用标准事件处理程序,我很容易使用已传递的对象发送器routedEventArgs e。如何使用命令执行此操作?                                

    <Grid DataContext="{StaticResource Person}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock HorizontalAlignment="Left" Margin="808,84,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="85" Width="323" FontSize="25" Text="{Binding Name}"/>
        <TextBox HorizontalAlignment="Left" Margin="138,107,0,0" TextWrapping="Wrap" Text="{Binding Name,Mode=TwoWay}" VerticalAlignment="Top" Width="435"/>
        <Button Content="Button" x:Name="Button1" Margin="100,375,0,0" VerticalAlignment="Top" Height="75" Width="257" Background="#FF39349E"/>
        <Button Content="Button" x:Name="Button2" HorizontalAlignment="Left" Margin="457,375,0,0" VerticalAlignment="Top" Height="75" Width="257" Background="#FF39349E"/>
        <Button Content="Button" x:Name="Button3" HorizontalAlignment="Left" Margin="830,375,0,0" VerticalAlignment="Top" Height="75" Width="257" Background="#FF39349E"/>
        <Button Content="Show The Message" HorizontalAlignment="Left" Margin="833,242,0,0" VerticalAlignment="Top" Width="273" Height="69" Background="#FFE07031"
                DataContext="{StaticResource Commands}" Command="{Binding RectangleCommand}"/>
    
    
    </Grid>
    

1 个答案:

答案 0 :(得分:0)

您使用CommandParameter Dependency Property来传递参数。

<Button Content="Show The Message" HorizontalAlignment="Left" Margin="833,242,0,0" VerticalAlignment="Top" Width="273" Height="69" Background="#FFE07031"
        DataContext="{StaticResource Commands}" CommandParameter"Show the message" Command="{Binding RectangleCommand}"/>

但是你想要实现的目标可能是通过触发器更好地实现的。您的命令不应该完全了解Button或UI。