2013-05-08 2 views
1

에 바인딩하지만 난 더 나은 하나 가지고 올 could'n 방법. 인수를 위해서캔버스에 도형 추가. 제목이 조금 모호 죄송 것을 VM

는이 전 사용자가 단지 클릭하고 선을 (난 정말 그 개발 아니지만, 그냥 간단하게하는) 그릴 드래그하는 간단한 그리기 응용 프로그램을 개발하고 있어요 가정 해 봅시다.

나는 라인이 그릴에 대한 사용자 정의 모양을 가지고있다. 지금은 필요에 따라보기에 새로운 라인을 추가 할,하지만 할 뷰 모델에 데이터 바인딩을 통해 ObservableCollection 속성을 사용하고 싶습니다. Usaully 나는 ItemsControl을 사용할 것입니다. 그러나 물론 ItemsControl 자동으로 내가 원하지 무엇을하는 항목입니다 배치합니다.

는 사람이 어떻게 그렇게 할 생각이 있습니까? ItemsControl의 레이아웃 기능을 사용 중지하는 방법이 있습니까?

답변

3

당신은 ItemsControlItemsPanelTemplate 그래서 그들 위치를 오브젝트 데이터에 Canvas.TopCanvas.Left 속성을 바인딩 할 ItemContainerStyle를 사용하여 다음의 항목을 보관하는 대신 StackPanelCanvas을 사용하여 변경할 수 있습니다.

<ItemsControl ItemsSource="{Binding MyCollection}"> 
    <!-- ItemsPanelTemplate --> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <!-- ItemContainerStyle --> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Canvas.Top" Value="{Binding Y}" /> 
      <Setter Property="Canvas.Left" Value="{Binding X}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

가 나는 ItemsControl 작품은 당신이 관심이 있다면 방법을 더 자세히 설명 ItemsControl에 대한 블로그 기사가 있습니다.