2010-11-24 7 views
2

Ich habe Probleme, ein Bild dynamisch zu ändern.Ändern eines Bildes dynamisch in C# mit WPF

Einige Hintergrundinformationen: Ich habe ein Listenfeld, das Elemente enthält, die ausgewählt werden können. Diese Gegenstände sind Lebensmittelkategorien. Wenn ein Benutzer auf eines der Lebensmittel klickt, möchte ich ein Bild an einer anderen Stelle der Seite ändern.

Meine XAML-Datei enthält:

<Image Name="bigImage" Stretch="Fill" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center"/> 

Also, wenn der Benutzer eine bestimmte Lebensmittelkategorie klickt, dass "bigImage" ändern würde:

FoodCollection foods = (FoodCollection)this.FindResource("FoodCategory"); 
      Food f = foods[foodListBox.SelectedIndex]; 
      Title_TextBlock.Text = f.Name; 
      bigImage = f.MainImage; 

In meinem Essen Klasse Ich habe eine Variable mit dem Namen Bild m_mainImage :

Ich las irgendwo, dass ich das Bild "auflösen" musste, aber ich wurde gelöst Ohr was das bedeutet. Ich dachte, das es tun würde:

m_mainImage.BeginInit(); 
        m_mainImage.Source = new BitmapImage(new Uri(m_mainImagePath, UriKind.RelativeOrAbsolute)); 
        m_mainImage.EndInit(); 

Sorry, ich bin noch neu in WPF und C#. Vielen Dank im Voraus.

Antwort

0

Haben Sie die DataContext des Fensters?

Ohne diese PropertyChanged nicht so initialisiert werden:

if (PropertyChanged != null) 
    PropertyChanged(this, new PropertyChangedEventArgs(name)); 

wird nie Feuer als PropertyChanged ist immer null.

+0

Oh hey, wie stelle ich den DataContext ein? –

+0

@Aero - das einfachste ist 'this.DataContext = this;', das es auf der höchsten Ebene in Ihrem Konstruktor einrichten wird, aber Sie können genauer sein. – ChrisF

0

-Setup einige TwoWay Bindung:

Versuchen:

bigImage.SetBinding(Image.SourceProperty, new Binding(){ 
     Source = f, 
     Path = new PropertyPath("MainImage"), 
     Mode=BindingMode.TwoWay 
    }); 

Oder:

<Image Name="bigImage" 
     Stretch="Fill" 
     Grid.Row="0" 
     Grid.Column="0" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Source="{Binding Path=MyBitmapImage, Mode=TwoWay}"/> 

public BitmapImage MyBitmapImage 
{ 
    get 
    { 
     return new BitmapImage(new Uri(m_mainImagePath, UriKind.RelativeOrAbsolute)); 
    } 
} 
+0

Es spielt kompilieren und ausführen. Ich habe die erste Methode versucht, aber es scheint immer noch, dass mein Bild nicht angezeigt wird: o –

+0

Ändern Sie den 'return' Wert von' MainImage' in 'BitmapImage' und den Getter zu:' return m_mainImage.Source'; – Gabe

0

Nicht sicher, ob dies helfen wird, soll aber nicht der Anruf an m_mainImage.EndInit() in dem Setter für MainImagePath auftritt nach dem Aufruf für RaisePropertyChanged("MainImage") ...

Andrew

Verwandte Themen