Ich muss eine Sammlung von RectangleGeometry-Rechtecken anzeigen, die in einem ViewModel hinzugefügt und entfernt werden, sodass ich eine ObservableCollection von RectangleGeometry-Objekten erstellt habe und innerhalb einer GeometryGroup an sie gebunden habe.In WPF wie binde ich eine ObservableCollection von RectangleGeometry ist?
Um mein Problem wirklich einfach zu sehen, zu machen, ich ohne die MVVM ein sehr einfaches Projekt erstellt. Auch wenn ich an den einfachen Code-Behind binde, erscheinen die Rechtecke nicht. Ich bin immer noch im WPF-Lernmodus, also wenn Sie eine bessere Möglichkeit haben, dies mit Vorlagen oder etwas anderem zu tun, bin ich sehr offen.
XAML:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="1024"
Height="768"
mc:Ignorable="d">
<Grid>
<Canvas>
<Path Fill="Red" Opacity=".4">
<Path.Data>
<GeometryGroup Children="{Binding Rectangles}"
FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Grid>
</Window>
-Code-behind:
Imports System.Collections.ObjectModel
Class MainWindow
Public Sub New()
InitializeComponent()
Rectangles = New ObservableCollection(Of RectangleGeometry)
Rectangles.Add(New RectangleGeometry(New Rect(50, 50, 500, 100)))
Rectangles.Add(New RectangleGeometry(New Rect(50, 50, 100, 500)))
Rectangles.Add(New RectangleGeometry(New Rect(200, 200, 100, 100)))
Rectangles.Add(New RectangleGeometry(New Rect(400, 400, 100, 100)))
Rectangles.Add(New RectangleGeometry(New Rect(20, 20, 100, 100)))
End Sub
Public Property Rectangles As ObservableCollection(Of RectangleGeometry)
End Class
Werfen Sie einen Blick auf [diesen Beitrag] (http://stackoverflow.com/a/22325266/1136211). Sie können das Rectangle in der ItemTemplate durch einen Path ersetzen, der in seiner Data-Eigenschaft über RectangleGeometry verfügt. Sie könnten dann auch den ItemContainerStyle vermeiden, da Sie die Eigenschaften Canvas.Left und Canvas.Top nicht binden müssen. – Clemens
Danke. Ich untersuche es jetzt. – IWishUWell