none
MVVM: Zugriff auf Properties des Viewmodels in der Codebehind-Detai der View RRS feed

  • Frage

  •  

    Hallo Experten,

    Ich habe eine kleine MVVM-Bespielanwendung, in der ich diverse Properties eines Viewmodels (direkt im XAML) an eine View binde. Nun möchte ich auch aus der CodeBedind-Datei der View auf diese Properties zugreifen - Konkret geht es mir darum, eine URI aus der ID eines Detaildatensatzes aus dem Viewmodel zu erstellen und damit ein Bild dynamisch anzuzeigen. Falls vorhanden, soll das Bild namens *ID*.jpg angezeigt werden; falls nicht vorhanden, soll ein entsprechendes "default picture" angezeigt werden. Mein Code sieht wie folgt aus:

     

      Public Sub New()
       InitializeComponent()
    
       ' Get /set the image 
       Dim bi As New BitmapImage
    
       Dim myFile As String = "/Ressources/pics/" & Me.MainGrid.DataContext.ID.ToString & ".jpg"
       Me.myMessageBox.Text = myFile
    
       If File.Exists(myFile) Then
        bi.BeginInit()
        bi.UriSource = New Uri(myFile, UriKind.Relative)
        bi.EndInit()
       Else
        bi.BeginInit()
        bi.UriSource = New Uri("/Ressources/pics/default.jpg", UriKind.Relative)
        bi.EndInit()
       End If
    
       Me.myImage.Source = bi
    
      End Sub
    Das scheint so nicht zu funktionieren ... wie muss ich "Me.MainGrid.DataContext.ID.ToString" umformulieren, damit ich einen Zugriff auf die ID-Property des gebundenen ViewModels bekomme?

     

     

    Montag, 16. August 2010 10:58

Antworten

  • Warum willst du ein CodeBehind nutzen, wenn Du alles im ViewModel machst? Du kannst doch Deine myImage.Source direkt im XAML an die Instanz des ViewModels binden.
     
    Wenn Du im Codebehind auf eine Ressource (z.B. ViewModel) zugreifen willst, dann nutze FindResource.
     

    --
    Viele Gruesse
    Peter

    • Als Antwort markiert AKR715 Dienstag, 17. August 2010 10:02
    Montag, 16. August 2010 11:38

Alle Antworten

  • Warum willst du ein CodeBehind nutzen, wenn Du alles im ViewModel machst? Du kannst doch Deine myImage.Source direkt im XAML an die Instanz des ViewModels binden.
     
    Wenn Du im Codebehind auf eine Ressource (z.B. ViewModel) zugreifen willst, dann nutze FindResource.
     

    --
    Viele Gruesse
    Peter

    • Als Antwort markiert AKR715 Dienstag, 17. August 2010 10:02
    Montag, 16. August 2010 11:38
  • Wie oben angemerkt, habe ich die ImageSource meines Images an ein BitmapImage-Property im korrespondierenden ViewModel gebunden. Im Konstruktor des ViewModels wird eine Methode getPicture des Models aufgerufen, die ein BitmapImage mit dem Bild *id.*.jpg (falls im Zielverzeichnis vorhanden) oder ggf. ein default-Image zurückliefert, welches ich an die BitmapImage-Property übergebe.

     

     

     

     

     

    Dienstag, 17. August 2010 10:02