图像源未动态更新

时间:2012-02-14 23:52:33

标签: silverlight windows-phone-7 xaml

我有一个Image,我已经将'Source'属性绑定到页面的相应'ViewModel'属性名为'Capture',如下所示:

查看代码:

<Image Height="150" HorizontalAlignment="Left" Margin="50,583,0,0" x:Name="img_FlickrPic" Stretch="Fill" VerticalAlignment="Top" Width="200" Grid.Row="1" Source="{Binding Capture}"/>

对应的ViewModel代码

public class SubmitViewModel:ViewModelBase     {

    private CameraCaptureTask cameraCapture;

    public ImageSource Capture { get; set; }

    public RelayCommand CaptureCommand { get; set; }

    /// <summary>
    ///   Initializes a new instance of the SubmitViewModel class.
    /// </summary>
    public SubmitViewModel()
    {                  
        Capture = new BitmapImage();
        CaptureCommand = new RelayCommand(() => CapturePhoto());
    }

    private object CapturePhoto()
    {
        cameraCapture = new CameraCaptureTask();
        cameraCapture.Completed += cameraCapture_Completed;
        cameraCapture.Show();
        return null;
    }     

    void cameraCapture_Completed(object sender, PhotoResult e)
    {
        if (e == null || e.TaskResult != TaskResult.OK)
        {
            return;
        }

        BitmapImage bitmap = new BitmapImage();
        bitmap.SetSource(e.ChosenPhoto);
        Capture = bitmap;
    }               

}

正如您所注意到的,我已经将捕获按钮绑定到视图模型,并使用'behavior而不是click事件来保持代码清洁。当我按下按钮时,相机会被调用,一旦我点击捕获,然后按下“接受”按钮,“cameraCapture_Completed”事件将按预期触发,并执行其中的代码。但是,设置了'Capture'属性(我在视图上绑定了我的Image的Source属性)的最后一步,我希望Image能够使用捕获的照片动态更新。这不会发生。视图模型继承自“ViewModelBase”,后者又实现了INotifyPropertyChanged,因此不应该是一个问题。为什么UI中的图像不反映对“捕​​获”属性的任何修改?我在这里搞砸了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须使用属性名称“Capture”手动引发ChangedPropertyEvent。像这样的东西。

ImageSource mCapture;
public ImageSource Capture {
      get {return mCapture;} 
      set { mCapture = value;
          RaiseChangedProperty("Capture");
          }
 }