我有一个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中的图像不反映对“捕获”属性的任何修改?我在这里搞砸了吗?
谢谢!
答案 0 :(得分:0)
您必须使用属性名称“Capture”手动引发ChangedPropertyEvent。像这样的东西。
ImageSource mCapture;
public ImageSource Capture {
get {return mCapture;}
set { mCapture = value;
RaiseChangedProperty("Capture");
}
}