2012-02-14 17 views
3

Windows 8 Developer Previewを使用しています。タイプがWinRTのImageSourceの場合、UserControlプロパティへのバインドエラーです。

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を有する:

 <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); 
     } 
    } 

これを実行すると、私はex ception:

型「System.InvalidCastExceptionの」の例外がTEST.EXEで発生したが、ユーザーコード

追加情報で処理されませんでした:型「Windows.UI.XamlのCOMオブジェクトをキャストすることができません。 「クラスタイプに 『Data.Binding Windows.UI.Xaml.Media.ImageSource』

は今...私は文字列型(文字列への結合)に、ユーザーコントロールのプロパティを変換する際に、すべての作品期待どおり、私は何か間違ったことをしているに違いない。何?

答えて

0

ObservableCollectionがWinRTで正常に動作していない(少なくともまだではない)場合は、代わりにObservableVectorを使用してください。 IObservableVectorの実装を提供するsampleがあります。

+0

私は知っている、私はしました。簡単にするために、この問題はObservableCollectionに変更しました。いずれも動作しません – Flores

+0

ああ、それでは問題ではありません。あなたのコードを見て、それは私によく見えます。登録時にPropertyMetadataを初期化してみてください。私はこのコードを試して実行しようとしています。 – sarvesh

+0

PropertyMetaDataの設定は役に立ちません。 – Flores

関連する問題