Wpf MVVM DependencyProperty不';当RaiseProperty更改时不更新
我有usercontrol,其中定义了DependencyPropertyWpf MVVM DependencyProperty不';当RaiseProperty更改时不更新,wpf,Wpf,我有usercontrol,其中定义了DependencyProperty #region ImageUri public static readonly DependencyProperty ImageUriProperty = DependencyProperty.Register( "ImageUri", typeof(string), typeof(ScrollableCanvas), new Propert
#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
在Xaml中,我像这样绑定一个值
<my:ScrollableCanvas Name="scrollableCanvas1" ImageUri="{Binding Path=LayerImage}" />
更新viewmodel中的LayerImage时,ImageUri属性不会更新
能帮点忙吗?谢谢
顺便说一句:当我在viewmodel的构造函数中设置LayerImage时,该值会更新。您不应该在setter中包含您的
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);
}
}