2012-03-27 6 views
1

私はusercontrolを持っており、そこにDependencyPropertyが定義されています。 XAMLでRaisePropertyChangedのMVVM DependencyPropertyは更新されません

 #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 

、私は私がのviewmodelにLayerImageを更新するとき、ImageUriプロパティが更新されないこの

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

のように値をバインドします。

何か助けてもらえますか?ありがとう。

BTW:値は、viewmodelのコンストラクタでLayerImageを設定すると更新されます。

答えて

0

セッターにUpdateImageコールを含めるのではなく、プロパティ変更コールバックにコールを含めるべきです。

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

これは機能します。まことにありがとうございます。 – user1205398

関連する問題