죄송합니다.하지만이 방법을 잘못 생각한 것 같습니다.
WPF에서는 패널이 배치되는 방식을 정의하기 만합니다.
패널을 사용하려고하기 때문에 모델에 컬렉션이 있다고 가정합니다. 올바른 패널 유형을 제공 할 수있는 ListBox
으로 컬렉션을 처리 할 수 있습니다. 즉
<ListBox ItemsSource="{Binding MyThings}">
<ListBox.ItemsPanel>
<StackPanel Orientation="Vertical"/>
</ListBox.ItemsPanel>
</ListBox>
그러나 이것은 일반적으로 단지 우리에게 클래스 이름의 목록을 제공, 당신의 것 중 하나가, 당신은 어떻게 표시하는 WPF 말할 필요하고,이를 위해 당신이 DataTemplate
를 사용 나타내는 각각. 리소스 섹션 (컨트롤, 창 또는 응용 프로그램) 또는 필요한 곳에 여러 위치에서 정의 할 수 있습니다.
<ListBox ItemsSource="{Binding MyThings}">
<ListBox.ItemsPanel>
<StackPanel Orientation="Vertical"/>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/> <!-- Assuming each thing has a name property-->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
업데이트 : 아니면
<ListBox ItemsSource="{Binding MyThings}">
<ListBox.ItemsPanel>
<Canvas/>
</ListBox.ItemsPanel>
<ListBox.Resources>
<DataTemplate TargetType="{x:Type MyLine}">
<Line x1="{Binding Left}" x2="{Binding Right}"
y1="{Binding Top}" y2="{Binding Bottom}"/>
</DataTemplate>
<DataTemplate TargetType="{x:Type MyRectangle}">
<Border Canvas.Left="{Binding Left}" Canvas.Right="{Binding Right}"
Canvas.Top="{Binding Top}" Canvas.Bottom="{Binding Bottom}"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>
는 또한 Josh Smith's article on MVVM을 통해 읽기를 보여주기 위해 다른 유형의 항목이있는 경우, 거기에 예와 좋은 연습을 많이 가지고 있으며, 소개하는 모델을 깨끗하게 유지하는 패턴.
다른 것은 필요하지 않습니다. 'FrameworkPropertyMetadataOptions.AffectsMeasure'를 설정하면 속성이 변경 될 때마다 새로운 레이아웃주기가 생깁니다. – Clemens
@Clemens하지만 그는 모델을 사용하고 있기 때문에 변경되는 ModelProperty가 아니라 변경되는 ModelProperty.Properties를 사용할 것입니다. – AlSki
예 알아요. int, double 및 string을 DP-Type으로 사용하면 작동합니다. 그러나 Model은 객체이며 DependencyProperty가 어떻게 작동하는지 모르고이 객체가 변경되었음을 인식합니다. 내 패널이 내 PropertyChangedHandler에 등록하지 않습니다 (INotifyPropertyChanged 사용) – Phoenix