Источник изображения не обновляется динамически - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть изображение, к которому я привязал свойство '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

открытый класс 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;
    }               

}

Как вы заметили, я также привязал кнопку захвата к модели представления, используя 'поведение' вместо события щелчка, чтобы сохранить код в чистоте. Когда я нажимаю кнопку, камера вызывается, и когда я нажимаю кнопку захвата, а затем нажимаю кнопку «Принять», событие «cameraCapture_Completed» срабатывает, как и ожидалось, и код там выполняется. Однако, на последнем шаге, где установлено свойство Capture (с которым связано свойство Source моего изображения в представлении), я ожидаю, что изображение будет динамически обновляться с захваченной фотографией. Такого не бывает. Модель представления наследуется от ViewModelBase, который, в свою очередь, реализует INotifyPropertyChanged, так что это не должно быть проблемой. Почему в пользовательском интерфейсе не отображаются какие-либо изменения свойства Capture? Я тут что-то напутал?

Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2012

Вы должны вручную вызвать ChangedPropertyEvent с именем свойства «Capture».Что-то вроде этого.

ImageSource mCapture;
public ImageSource Capture {
      get {return mCapture;} 
      set { mCapture = value;
          RaiseChangedProperty("Capture");
          }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...