2012-04-21 3 views
0

У меня есть следующий класс:DataBinding Image.Source в результате PhotoChooserTask не работает

public class Sticky : INotifyPropertyChanged { 

    // ... some members 

    private BitmapImage _frontPic; 
    [DataMember] 
    public BitmapImage FrontPic { 
     get { 
      return _frontPic; 
     } 
     set { 
      _frontPic = value; 
      Changed("FrontPic"); 
      Changed("FrontBrush"); 
     } 
    } 
} 

Я пытаюсь привязка его к этому XAML:

<Image Width="173" Height="173" Source="{Binding FrontPic}" /> 

после запуска PhotoChooserTask с этим код в моем PhoneApplicationPage:

public Sticky Sticky { get; set; } 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { 
    Sticky = new Sticky(); 
    DataContext = Sticky; 
} 

private void ShowFrontPicPicker(object sender, RoutedEventArgs e) { 
    var t = new PhotoChooserTask(); 
    t.PixelHeight = 173; 
    t.PixelWidth = 173; 
    t.ShowCamera = true; 

    t.Completed += (s, ev) => { 
     if (ev.TaskResult == TaskResult.OK) { 
      var img = new BitmapImage(); 
      img.SetSource(ev.ChosenPhoto); 
      Sticky.FrontPic = img; 
     } 
    }; 

    t.Show(); 
} 

Однако мое изображение остается пустым. Если я присвою свойству Image.Source напрямую изображение без привязки данных, все будет работать. Создание привязки других свойств работает, это просто изображение, которое, похоже, является проблемой. Как я могу заставить DataBinding работать с изображением?

ответ

0

Обнаружена проблема! Завершенный обратный вызов для PhotoChooserTask не отменяется в потоке пользовательского интерфейса, поэтому необходимо добавить Dispatcher.BeginInvoke:

t.Completed += (s, ev) => Dispatcher.BeginInvoke(() => { 
    // do stuff... 
}); 
Смежные вопросы