Światło MVVM było przyjemnością do nauki, ale tutaj utknąłem. Problem polega na wystrzeliwaniu zdarzeń.MVVM-Light, wystrzeliwanie zdarzeń z przycisku wewnątrz szablonu kolumny siatki danych
W kodzie poniżej jeden przycisk uruchamia zdarzenia i pożary. Drugi przycisk nie robi. Na wyjściu nie są zgłaszane żadne błędy wiązania. Czy jest coś oczywistego, czego mi brakuje?
<Grid x:Name="LayoutRoot">...
<StackPanel>
<Button Content="THIS BUTTON WORKS">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<Command:EventToCommand Command="{Binding DataContext.HandleAddQuestionActionCommand, ElementName=LayoutRoot, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<sdk1:DataGrid ItemsSource="{Binding QuestionActions}" AutoGenerateColumns="False" >
<sdk1:DataGrid.Columns>
<sdk1:DataGridTextColumn Binding="{Binding Answer.Name}" Header="Answer"/>
<sdk1:DataGridTemplateColumn Header="Edit">
<sdk1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="THIS BUTTON DONT WORK" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<Command:EventToCommand Command="{Binding DataContext.HandleEditQuestionActionCommand, ElementName=LayoutRoot, Mode=OneWay}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</DataTemplate>
</sdk1:DataGridTemplateColumn.CellTemplate>
</sdk1:DataGridTemplateColumn>
</sdk1:DataGrid.Columns>
</sdk1:DataGrid>
</StackPanel>
kod ViewModel:
public RelayCommand<RoutedEventArgs> HandleAddQuestionActionCommand {
get; private set;
}
public RelayCommand<RoutedEventArgs> HandleEditQuestionActionCommand {
get; private set;
}
HandleAddQuestionActionCommand = new RelayCommand<RoutedEventArgs>(e =>{...});
HandleEditQuestionActionCommand = new RelayCommand<RoutedEventArgs>(e =>{...});
Dokładnie tego potrzebowałem! Dziękuję, a wraz z tym MVVM-light nadal jest prostym i eleganckim podejściem do silverlight we wszystkich scenariuszach. Jeszcze raz dziękuję – nachonachoman
Czy to działa również w silverlight lub działa tylko w WPF? – Radhi
Ten przykład został utworzony w programie Silverlight, a nie w WPF. –