2009-10-30 6 views
0

모양 모음에 어떻게 바인딩하나요?셰이프 컬렉션에 바인딩?

셰이프를 그릴 때 MVVM을 사용하는 작은 응용 프로그램을 (단지 학습 목적으로) 구축하고 싶습니다.

는 MainWindow를의 DataContext를는 MainWindowViewModel

MainWindowViewModel 도형의 ObservableCollection에이 있는지

이다. 나는이 같은 사각형을 추가

<Window x:Class="DesktopCanvas.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
> 
    <Canvas DataContext="{Binding Source=ShapeCollection}"> 
    </Canvas> 
</Window> 

을 MainWindowViewModel의 생성자에서 :

나는 작동하지 않는 컬렉션에 바인딩의 DataContext에 내 MainWindow를에 현재는 캔버스를

this.ShapeCollection = new ObservableCollection<Shape>(); 
Rectangle rect = new Rectangle(); 
//Größe 
rect.Height = 75; 
rect.Width = 75; 
//Transparenz 
rect.Opacity = 100; 
//Farbe 
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red); 
rect.Fill = myBrush; 
this.ShapeCollection.Add(rect); 

아니요 지금까지 바인딩 오류가 없습니다. 어떤 아이디어?

답변

1

ItemsControl을 사용하여 데이터 컬렉션에 바인딩하고 각 조각의 데이터를 일종의 UI로 나타내는 으로 만들려고합니다. 또한 바인딩을 올바르게 설정하지 않았습니다. 의이 두 가지가 볼 수있는 방법을 시작하자 :

<ItemsControl ItemsSource="{Binding Path=ShapeCollection, Element=MainWindow}"> 
</ItemsControl> 

참고 : 창 요소에 이름 = "MainWindow를"및 ShapeCollection은이 속성이 꺼져 있는지 : 위의 바인딩 선언은 당신이 X를 적용한 가정 MainWindow 클래스의.

이제 ItemsControl의 기본 레이아웃이 세로 방향이있는 StackPanel이므로 셰이프가 다른 셰이프 위에 쌓여 있어야합니다. 요소의 레이아웃을 변경하려면 ItemsControl의 ItemPanelTemplate을 변경합니다. 모양이 수평으로 배치하고 vertifcally 포장되도록 공간이 부족 할 때의 그것을 변경하자

<ItemsControl Height="100" ItemsSource="{Binding ShapeCollection, ElementName=Window, Mode=Default}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

마지막의 전반적인 접근 방식에 대해 이야기하자. 현재 실제로는 Shapes를 데이터로 사용하고 있는데 실제로는 Mode-View-ViewModel (MVVM)이라는 기술에서 다소 뒤로 향합니다. MVVM에서는 순수한 데이터 객체를 원하고 사용자 또는 디자이너가 DataTemplates를 사용하여 해당 데이터의 시각적 표현을 정의하기 만하면됩니다. MVVM에 대한 자세한 내용은 여기 StackOverflow에서 태그를 클릭하고 투표 된 최고 질문을 파헤 치는 것이 좋습니다.

관련 문제