在创建ListView时将其添加到ListView

我在canvas中创建形状(矩形,椭圆,线条)。 然后我在另一个窗口中有一个listview,我需要输入形状的信息(如位置,大小,形状是什么)。

我在另一个窗口的XAML中有这个代码:

           

在主窗口的c#中,我有一个可观察的集合和这段代码:

 ObservableCollection shapes = new ObservableCollection(); myRect.Width = var1; myRect.Height = var2; Page.Children.Add(myRect); Canvas.SetLeft(myRect, posx); Canvas.SetTop(myRect, posy); shapes.Add(myRect); 2ndwindow.Information.ItemsSource = shapes; // this is working because the 2ndwindow is owned by the mainwindow 

编辑:我设法绑定宽度和高度,但我不知道如何绑定位置和形状(矩形或椭圆形)

在适当的MVVM方法中,您应该有一个带有Shape的抽象表示的视图模型(而不是UI元素列表),例如:

 public class ShapeData { public string Type { get; set; } public Geometry Geometry { get; set; } public Brush Fill { get; set; } public Brush Stroke { get; set; } public double StrokeThickness { get; set; } } public class ViewModel { public ObservableCollection Shapes { get; } = new ObservableCollection(); } 

您现在可以将此视图模型绑定到如下所示的视图。 从形状对象的GeometryBounds属性中检索每个形状的位置和大小。

                              

您可以在窗口的构造函数中创建一个视图模型实例,并添加一些示例数据,如下所示:

 public MainWindow() { InitializeComponent(); var viewModel = new ViewModel(); viewModel.Shapes.Add(new ShapeData { Type = "Circle", Geometry = new EllipseGeometry(new Point(100, 100), 50, 50), Fill = Brushes.Orange, Stroke = Brushes.Navy, StrokeThickness = 2 }); viewModel.Shapes.Add(new ShapeData { Type = "Rectangle", Geometry = new RectangleGeometry(new Rect(200, 50, 50, 100)), Fill = Brushes.Yellow, Stroke = Brushes.DarkGreen, StrokeThickness = 2 }); DataContext = viewModel; }