2012-03-27 10 views
1

Ich habe usercontrol, und es ist eine DependencyProperty definiert.MVVM DependencyProperty wird nicht aktualisiert, wenn RaisePropertyChanged

 #region ImageUri 
    public static readonly DependencyProperty ImageUriProperty = DependencyProperty.Register(
     "ImageUri", 
     typeof(string), 
     typeof(ScrollableCanvas), 
     new PropertyMetadata(new PropertyChangedCallback(ImageUriPropertyChangedCallback))); 

    private static void ImageUriPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     ScrollableCanvas main = sender as ScrollableCanvas; 
     if (main != null) 
     { 
      main.ImageUri = (string)e.NewValue; 
     } 
    } 

    public string ImageUri 
    { 
     get 
     { 
      return (string)GetValue(ImageUriProperty); 
     } 
     set 
     { 
      SetValue(ImageUriProperty, value); 
      UpdateImage(); 
     } 
    } 
    #endregion 

Im XAML, band ich einen Wert zu wie diese

<my:ScrollableCanvas Name="scrollableCanvas1" ImageUri="{Binding Path=LayerImage}" /> 

, wenn ich die LayerImage im Ansichtsmodell aktualisieren, die ImageUri Eigenschaft nicht aktualisiert.

Kann Ihnen etwas helfen? Vielen Dank.

BTW: Der Wert wird aktualisiert, wenn ich die LayerImage im Konstruktor des Viewmodel gesetzt.

Antwort

0

Sie sollten Ihren UpdateImage Aufruf nicht in Ihren Setter aufnehmen, sondern in den Callback der Eigenschaft geändert.

public static readonly DependencyProperty ImageUriProperty = DependencyProperty.Register(
    "ImageUri", 
    typeof(string), 
    typeof(ScrollableCanvas), 
    new PropertyMetadata(new PropertyChangedCallback(ImageUriPropertyChangedCallback))); 

private static void ImageUriPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    ScrollableCanvas main = sender as ScrollableCanvas; 
    if (main != null) 
    { 
     // Since ImageUri has already been called at this point, you can just update your image here... 
     main.UpdateImage(); 
    } 
} 

public string ImageUri 
{ 
    get 
    { 
     return (string)GetValue(ImageUriProperty); 
    } 
    set 
    { 
     SetValue(ImageUriProperty, value); 
    } 
} 
+0

Es funktioniert. Vielen Dank. – user1205398

Verwandte Themen