2015-05-27 3 views
0

Я пытаюсь понять, как использовать параметры управления, которые у вас есть обычный типичный обработчик событий, например, щелчок с помощью команд. Я научился запускать метод с помощью команд, но что, еслиКак передать параметр управления xaml как объект, routedEventArgs в команду?

  1. Я хочу обратиться к своим кнопкам в пользовательском интерфейсе, когда мои методы находятся в совершенно другом классе?
  2. Как перейти к параметрам нажатого элемента управления?

Вот что у меня есть, не уверен, если его профессиональный путь, чтобы использовать его, надеюсь, что да :) Это класс и команда связана с контролем:

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> 

+0

Не могли бы вы разместить XAML-код и предоставить конкретные цели, которые необходимо достичь? –

ответ

0

Вы используете CommandParameterDependency 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}"/> 

Но то, что вы пытаетесь достичь, вероятно, лучше достигается с помощью триггеров. Ваша команда ничего не должна знать о кнопке или идеальном интерфейсе.

 Смежные вопросы

  • Нет связанных вопросов^_^