2010-06-28 5 views
3

내 수업에 캔버스 속성이 있는데 xaml의 캔버스에 바인딩 할 수 있는지 궁금합니다.캔버스에 바인딩

어떻게 데이터 바인딩이 캔버스에서 작동합니까?

<Canvas ItemSource="{Binding ClassCanvas}" /> 
+0

자세한 내용을 입력 해주세요. – SLaks

+0

내 질문이 업데이트되었습니다. – Robert

답변

3

당신이 당신의 캔버스 당신이 쓸 수있는 하나의 항목으로 클래스의 전체 캔버스를 포함하는 XAML에 정의하려면 다음

<Canvas> 
    <ContentPresenter Content="{Binding ClassCanvas}" /> 
    ... other items here ... 
</Canvas> 

당신은 당신의 캔버스로 모두 같은 UiElements의를 포함하는 XAML에 정의하려면 클래스에 정의 된 Canvas는 UIElement가 하나의 UIElement 부모 만 가질 수 있기 때문에 불가능합니다. 따라서 클래스에 정의 된 Canvas가 지정된 UIElement의 부모이면 XAML에 정의 된 Canvas를 사용할 수 없습니다.

당신이 당신의 클래스에 정의 된 캔버스의 각 UIElement에서 데이터를 표시하도록 캔버스, 당신은 캔버스 패널과 DataTemplate을 가진 ItemsControl을 사용하여이 작업을 수행 할 수 원하는 경우 :

<ItemsControl ItemsSource="{Binding ClassCanvas.Children}"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Canvas /> 
    </ItemsPanelTemplate> 
    </ItemsControl> 
    <ItemsControl.ItemsContainerStyle> 
    <Style> 
     <Setter Property="Canvas.Left" Value="{Binding (Canvas.Left)}" /> 
     <Setter Property="Canvas.Left" Value="{Binding (Canvas.Top)}" /> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
      ... display of UIElement here, either using VisualBrush or custom display 
      </ControlTemplate> 
     <Setter.Value> 
     </Setter> 
    </Style> 
    </ItemsControl.ItemsContainerStyle> 
</ItemsControl> 

참고이 코드는 것 INotifyCollectionChanged 컬렉션이 아니기 때문에 Children 속성을 한 번만 검사합니다.

Canvas.Top 및 Canvas.Left 속성이 설정된 UIElements 컬렉션이 포함 된 클래스의 속성에 바인딩하려면 컨테이너가 Canvas 대신 ObservableCollection 인 경우 쉽게 수행 할 수 있습니다.

Canvas 클래스는 데이터 영역 내에서 사용하도록 설계된 적이 없었습니다. ObservableCollection을 사용하여보기의 일부로 Canvas 만 사용하도록 전환하는 것이 좋습니다.

0

예.

캔버스 나 다른 개체에 바인딩 할 수 있습니다.

+0

그래서 내 수업에서 캔버스 개체를 가지고 xaml의 캔버스에 바인딩 할 수 있습니까? 데이터 바인딩은 어떻게 작동합니까? 클래스의 캔버스에 자식을 추가 할 수 있습니까? xaml에서 변경 될 수 있습니까? – Robert

+0

클래스의 Canvas 객체를 설정하여 XAML의 캔버스를 참조 할 수 있습니다. – SLaks