Как получить несколько элементов управления для запуска одного и того же события / команды в Silverlight / XAML? - PullRequest
0 голосов
/ 19 января 2011

Я использую команды Mvvm-Light для маршрутизации событий из моих представлений в мои модели представления.Прекрасно работает.

Но я думаю, что могу быть более элегантным.На самом деле это, вероятно, просто стандартный вопрос XAML:

Я хочу изменить это (10 кнопок все с Click="keypadButton_Click" для их обработчика событий):

<Button  Name="button1" Content="1" Grid.Row="0" Grid.Column="0" Click="keypadButton_Click" />
<Button  Name="button2" Content="2" Grid.Row="0" Grid.Column="1" Click="keypadButton_Click"/>
<Button  Name="button3" Content="3" Grid.Row="0" Grid.Column="2" Click="keypadButton_Click"/>
<Button  Name="button4" Content="4" Grid.Row="1" Grid.Column="0" Click="keypadButton_Click"/>
<Button  Name="button5" Content="5" Grid.Row="1" Grid.Column="1" Click="keypadButton_Click"/>
<Button  Name="button6" Content="6" Grid.Row="1" Grid.Column="2" Click="keypadButton_Click"/>
<Button  Name="button7" Content="7" Grid.Row="2" Grid.Column="0" Click="keypadButton_Click"/>
<Button  Name="button8" Content="8" Grid.Row="2" Grid.Column="1" Click="keypadButton_Click"/>
<Button  Name="button9" Content="9" Grid.Row="2" Grid.Column="2" Click="keypadButton_Click"/>
<Button  Name="button0" Content="0" Grid.Row="3" Grid.Column="1" Click="keypadButton_Click"/>

До 10 из них:

<Button  x:Name="button1" Content="1" Grid.Row="0" Grid.Column="0">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <Command:EventToCommand 
               Command="{Binding KeyPadButtonCommand}"
               CommandParameter="{Binding ElementName=button1, Path=Content }"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

Но я не хочу много XAML.Я бы подумал, что был бы способ «макросизировать» триггер, чтобы он выглядел примерно так:

<Button  Name="button1" Content="1" Grid.Row="0" Grid.Column="0" 
         Click="{Binding _SendTheEventHere_}" />

Где "{Binding _SendTheEventHere_}" следует заменить каким-то магическим заклинанием, о котором я не догадываюсь, но язнаю, какой-то мастер здесь по stackoverflow знает: -).

Имеет смысл?

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Я не уверен, правильно ли я вас понимаю, но вы можете использовать RelayCommand в MVVM Light Toolkit вот пример кода

Обычно RelayCommand - это реализация интерфейса ICommand, который вы можете использовать

0 голосов
/ 19 января 2011

Я только что выполнил тест, используя следующий XAML, и он, кажется, успешно работает: -

Ваша кнопка XAML: -

<Button Name="MyConfirmButton" 
        Content="Confirm" 
        Grid.Column="1" 
        Style="{StaticResource ButtonStyle}"
        i:Interaction.Triggers="{StaticResource PerformConfirm}">
</Button>

Ваш ресурс XAML: -

<UserControl.Resources>
   <i:EventTrigger x:Key="PerformConfirm" EventName="Click">
      <cmd:EventToCommand Command="{Binding Path=PerformConfirm}" />
   </i:EventTrigger>
</UserControl.Resources>

Надеюсь, это поможет

...