画像をItemsControl
表示するCanvasがあります。私はObservableCollection
プロパティを持つクラスのwithオブジェクトを持っています:
Image Image;
double X;
double Y;
私のXAMLには次のコードが含まれています。
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas AllowDrop="True" Drop="Canvas_Drop_1" MouseDown="canvas_MouseDown_1" Background="{StaticResource LightColor}" Name="canvas" >
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Image}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding Y}" />
<Setter Property="Canvas.Left" Value="{Binding X}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
私のはどこImages
ですかObservableCollection
。Image
ここで問題となるのは、そのコレクションのをにバインドできないことImageSource
ですDataTemplate
。私が書いたようにそれを行うと、エラーが発生します:
System.Windows.Dataエラー:1:タイプ「System.Windows.Controls.Image」と「System.Windows.Media.ImageSource」の間で「一方向」変換を実行するデフォルトのコンバーターを作成できません。BindingのConverterプロパティの使用を検討してください。BindingExpression:Path = Image; DataItem ='ImageItemViewModel'(HashCode = 7670737); ターゲット要素は'Image'(Name ='');です。ターゲットプロパティは「ソース」(タイプ「ImageSource」)です
System.Windows.Dataエラー:5:BindingExpressionによって生成された値はターゲットプロパティに対して無効です。; Value ='System.Windows.Controls.Image' BindingExpression:Path = Image; DataItem ='ImageItemViewModel'(HashCode = 7670737); ターゲット要素は'Image'(Name ='');です。ターゲットプロパティは「ソース」(タイプ「ImageSource」)です
私が置くとそれは動作します:
<Image Source="{Binding Image.Source}"/>
それ以外の
<Image Source="{Binding Image}"/>
しかし、その後、私はそれが持っているすべての画像のプロパティ(効果など)を失っています。
Image
したがって、問題は、ソースだけをバインドするのではなく、コレクションオブジェクトにあるオブジェクト全体をそこに配置するにはどうすればよいかということです。