Ошибка привязки к свойству UserControl, если тип является ImageSource в WinRT - PullRequest
3 голосов
/ 14 февраля 2012

Использование Windows 8 Developer Preview.

У меня есть объект с одним из следующих свойств:

    private ImageSource _Image = null;
    public ImageSource Image
    {
        get
        {
            return this._Image;
        }

        set
        {
            if (this._Image != value)
            {
                this._Image = value;
                this.OnPropertyChanged("Image");
            }
        }
    }

    public void SetImage(Uri baseUri, String path)
    {
        Image = new BitmapImage(new Uri(baseUri, path));
    }

Это используется в ObservableCollection следующим образом:

        var test = new ObservableCollection<object>();

        ButtonItem item = new ButtonItem();
        item.SetImage(this.basUri, "Data/Images/test.png");

Где test.png включен как контент.

Эта коллекция используется для установки ItemsSource сетки, например:

ItemGridView.ItemsSource = test;

И у этой таблицы есть шаблон данных:

        <DataTemplate x:Key="testtemp">
        <Grid HorizontalAlignment="Left" Background="White">
          <StackPanel Orientation="Horizontal" Margin="10,10,0,0">
            <my:MyButton Image="{Binding Image}"></my:MyButton>
          </StackPanel>
        </Grid>
    </DataTemplate>

Этот MyButton является пользовательским элементом управления, для которого свойство изображения является свойством зависимости, например:

    public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.Register("Image", "ImageSource", typeof(VSButton).FullName, null);

    public ImageSource Image
    {
        get { return (ImageSource)GetValue(ImageSourceProperty); }
        set 
        {
            SetValue(ImageSourceProperty, value);
        }
    }

Теперь, когда я запускаю это, я получаю исключение:

Исключение типа 'System.InvalidCastException' произошло в Test.exe, но не было обработано в коде пользователя

Дополнительная информация: невозможно преобразовать COM-объект типа «Windows.UI.Xaml.Data.Binding» в тип класса «Windows.UI.Xaml.Media.ImageSource»

Теперь ... когда я преобразую свойство в usercontrol в строковый тип (и привязку к строке), все работает как положено, поэтому я должен делать что-то еще не так ... что?

1 Ответ

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

ObservableCollection не работает должным образом (по крайней мере, пока) в WinRT, вместо этого используйте ObservableVector.Существует образец , который обеспечивает реализацию IObservableVector.

...