J'ai un UserControlBase
avec une grille. La grille contient une colonne avec une action.ICommand ne fonctionne pas dans Silverlight Contrôle utilisateur
<sdk:DataGridTemplateColumn Header="Action">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Button Style="{StaticResource DataGridButton}" Command="{Binding Source={StaticResource NewsViewModel}, Path=ModifyNewsCommand}" Content="Modify" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
Mon problème est avec mon Command
. Il me lance Erreur technique qui est mon premier problème, je ne sais pas comment faire de cette application me jeter le vrai message d'erreur.
Dans le code derrière de mon contrôle utilisateur J'enregistré les événements:
protected void RegisterMessages()
{
Messenger.Default.Register<string>(this, "NewNewsBtn_Click", NewNewsBtn_Click);
Messenger.Default.Register<string>(this, "ModifyNewsBtn_Click", ModifyNewsBtn_Click);
}
Et dans mon constructeur:
public NewsWindow(int underlyingId)
{
InitializeComponent();
this.RegisterMessages();
viewModel = new NewsViewModel(underlyingId);
ucNewsPanel.DataContext = viewModel;
}
Mon modèle de vue (NewsViewModel)
public ICommand ModifyNewsCommand
{
get
{
return new RelayCommand<string>(e =>
{
Messenger.Default.Send(string.Empty, "ModifyNewsBtn_Click");
});
}
}
Quoi de neuf bizarre ici est que mon NewNewsBtn
fonctionne, alors que mon ModifyNewsBtn
n'est pas.
Ce bouton est en dehors de la grille, donc cela peut faire une différence sur pourquoi il fonctionne.
<Button x:Name="NewNewsBtn" MaxHeight="50" MaxWidth="100" Command="{Binding Path=NewNewsCommand}" Content="Add New" />
Pourquoi utilisez-vous un StaticResource dans votre liaison au lieu d'accéder au DataContext? Il me semble que c'est la cause de votre bouton ne fonctionne pas. – Martin
Je suppose que cette partie est erronée ** Command = "{Source de liaison = {StaticResource NewsViewModel}, Path = ModifyNewsCommand}" ** – ViVi
@Martin - Si vous supprimez la StaticResource et laissez simplement le chemin, cela ne fonctionne pas. Il ne me jette pas d'erreur mais il n'entre pas dans la méthode. –