2013-01-22 4 views
1

Canvas에 내 이미지가 표시되는 ItemsControl이 있습니다. 나는 propoties와 클래스의 객체와 함께 ObservableCollection 있습니다 ImagesObservableCollection입니다DataTemplate에서 이미지 소스를 바인딩하는 동안 오류가 발생했습니다.

<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> 

:

Image Image; 
double X; 
double Y; 

내 XAML은 다음과 같은 코드가 포함되어 있습니다. 이제 문제는 해당 컬렉션의 ImageImageSourceDataTemplate에 바인딩 할 수 없다는 것입니다.

System.Windows.Data Error: 1 : Cannot create default converter to perform 'one-way' conversions between types 'System.Windows.Controls.Image' and 'System.Windows.Media.ImageSource'. Consider using Converter property of Binding. BindingExpression:Path=Image; DataItem='ImageItemViewModel' (HashCode=7670737); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource')

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='System.Windows.Controls.Image' BindingExpression:Path=Image; DataItem='ImageItemViewModel' (HashCode=7670737); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource')

그것은 내가 넣을 때 작동합니다 :

<Image Source="{Binding Image.Source}"/> 

대신

<Image Source="{Binding Image}"/> 

하지만 내가 잃고 내가 쓴 나는 그것을 할 경우에, 나는 오류를 받고 있어요 모든 이미지의 속성 (예 : 효과 등).

그래서 질문은 : 전체 소스를 바인딩하는 대신 컬렉션 개체에있는 전체 Image 개체를 어떻게 넣을 수 있습니까?

답변

2

귀하의 Image 속성은 ImageSource, 또는 아마도 Uri 또는 string 대신 Image 제어 할 수 있지만 안된다. 당신이 정말로 컨트롤을 할 속성을 필요로하는 경우

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> 
+0

예, 는 내가 찾고있는 것입니다! 고맙습니다! – krajol

+0

ContentControl 대신 ContentPresenter를 사용하는 방법은 [이 질문 (http://stackoverflow.com/q/1287995/1136211)을 참조하십시오. – Clemens

관련 문제