2012-03-21 4 views
0

私は、ItemsSourceとしてImageのコレクションをとるカスタムコントロールRadCoverFlowを持っています。WPFでアイテムテンプレート内のコレクションのBinding要素を取得する方法は?

<StackPanel Orientation="Vertical" Background="Black"> 
    <telerik:RadCoverFlow x:Name="coverFlow" 
          ItemsSource="{Binding ViewImages, Mode=OneWay}" 
          ItemTemplate="{StaticResource ImageTemplate}" 
    </telerik:RadCoverFlow> 
</StackPanel> 

私はwidh、高さ、およびデータテンプレートを使用して画像の他の特性のいくつかを定義したいです。私の問題は、データテンプレートでは、各画像のソースを指定する必要があるが、そのソースはコードで既に指定されているということです。

<DataTemplate x:Key="ImageTemplate"> 
     <Image Source="" Width="100" Height="100" Stretch="Uniform" telerik:RadCoverFlow.EnableLoadNotification="True" /> 
    </DataTemplate> 

がどのように私はソースを再指定するか、またはのようなソースにソースをバインドすることはできません{バインディングViewImages [i]は}、私はこのケースではでしょうか?

ので、あなたのItemsSourceは、Image UIが

オブジェクトしかし、それは言ってい試してみて、あなたの特性を設定するために、暗黙的なスタイルを使用しないでください、あなたは

+0

ソースはどこに指定されていますか?それはViewImageオブジェクトにありますか? – Botz3000

+0

DataContextはコードビハインドでViewModelクラスに設定されています。このクラスはViewImagesコレクションを持ち、イメージのソースを設定し、イメージをViewImagesコレクションに追加します。 –

答えて

1

理想的には、あなたのビジネスオブジェクトとあなたのUIを完全に分離する必要がありますありがとうございました

<telerik:RadCoverFlow.Resources> 
    <Style TargetType="{x:Type Image}"> 
     <Setter Property="Height" Value="100" /> 
     <Setter Property="Width" Value="100" /> 
     <Setter Property="Stretch" Value="Uniform" /> 
     <Setter Property="telerik:RadCoverFlow.EnableLoadNotification" Value="True" /> 
    </Style> 
</telerik:RadCoverFlow.Resources> 
+0

これはうまくいきましたが、あなたの助言を受けて、代わりにBitmapImagesを保持するようにコレクションを変更しました。次に、DataTemplateをSource = "{Binding}"に設定します。それは動作しますが、私はSource = "{Binding}"が何をしているのか不思議に思っていましたか? –

+0

@didibus現在の 'DataContext'が何であってもプロパティをバインドします。あなたのケースでは、 'DataContext'はあなたの' BitmapImage'でしたので、 'BitmapImage'のプロパティではなく' BitmapImage'にソースを設定しています。 – Rachel

+0

ああ、私が正しく理解すれば、DataTemplateのDataContextはコレクションの各項目に設定しますか? –

関連する問題