3

画像を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ですかObservableCollectionImageここで問題となるのは、そのコレクションのをにバインドできないこと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したがって、問題は、ソースだけをバインドするのではなく、コレクションオブジェクトにあるオブジェクト全体をそこに配置するにはどうすればよいかということです。

4

1 に答える 1

4

Imageプロパティは、Imageコントロールではなく、ImageSource 、またはおそらくまたはの代わりに使用する必要があります。Uristring

public class DataItem
{
    public ImageSource Image { get; set; }
    ...
}

また

public class DataItem
{
    public string ImageUrl { get; set; }
    ...
}

ただし、プロパティをコントロールにする必要がある場合は、それをContentControlに入れることができます。

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <ContentControl Content="{Binding Image}"/>
    </DataTemplate>
</ItemsControl.ItemTemplate>
于 2013-01-22T10:50:46.470 に答える