Je travaille actuellement sur une application SilverLight 3. J'utilise MVVM Pattern et Prism. J'ai tout fonctionne sauf l'article suivant. Sur l'une de mes vues, je dois utiliser un OpenFileDialog. J'ai essayé de le faire dans le ViewModel seulement pour découvrir que le modèle de sécurité de SilverLight l'interdit parce qu'il est seulement autorisé à être initié par l'utilisateur. J'ai depuis déplacé le code OpenFileDialog vers le code-behind de la vue. Voici mon problème cependant. Bien que je sois lié à la source définie sur TwoWay, il ne frappe pas le setter de la propriété dans mon ViewModel.Silverlight MVVM Prism et OpenFileDialog
Exemple de contrôle d'image avec une liaison:
<Image x:Name="imgCard" Height="283" Width="463" Canvas.Left="8" Canvas.Top="8" OpacityMask="White" Source="{Binding Path=CardImage, Mode=TwoWay}"/>
Bouton Utilisé par l'utilisateur:
<Button x:Name="btnUpload" Height="20" Width="122" Canvas.Left="8" Canvas.Top="319" Content="Upload Image" Click="btnUpload_Click" />
Cliquez sur l'événement:
private void btnUpload_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "PNG Files(*.png)|*.png";
ofd.ShowDialog();
using (Stream stream = ofd.File.OpenRead())
{
BitmapImage image = new BitmapImage();
image.SetSource(stream);
imgCard.Source = image;
}
}
Mon ViewModel met en œuvre le INotifyPropertyChanged et les éléments suivants sont propriété.
BitmapSource CardImage
{
get
{
return _imageSource;
}
set
{
_imageSource = value;
NotifyPropertyChanged("CardImage");
}
}
Si je mets un point d'arrêt sur le Setter. Ça ne le frappe jamais.
Quel est le DataContext de votre fichier XAML? –
Le DataContext est le ViewModel lui-même. Il est injecté par Unité. – cjibo