在WPF中使用MVVM将n个矩形添加到canvas

我想在我的mvvm应用程序的主窗口中添加一组矩形。 在我的viewModel中,我有一个对象集合,我用转换器转换为System.Windows.Shapes.Rectangle类(代码如下):

视图模型:

RecognizedValueViewModel { public ObservableCollection BarcodeElements { get { return _BarcodeElements; } set { _BarcodeElements = value; } } public RecognizedValueViewModel() { BarcodeElements = InitializeBarcodeElements(); } } 

转换器:

 public BarcodeElementToRectangleConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Rectangle barcodeRectangle = GetRectangleFromBarcodeElement(value as BarcodeElement); return barcodeRectangle; } } 

矩形应显示在MainWindow的canvas中:

    

我会在代码中将Rectangle添加到canvas中,但我现在还没有在运行时有多少个矩形。 我有办法实现这个目标吗? 保护你。

在适当的MVVM方法中,您将拥有一个视图模型,其中包含矩形列表的抽象表示,例如:

 public class RectItem { public double X { get; set; } public double Y { get; set; } public double Width { get; set; } public double Height { get; set; } } public class ViewModel { public ObservableCollection RectItems { get; set; } } 

然后,您将拥有一个使用ItemsControl可视化此类Rect项集合的视图。 ItemsControl将Canvas作为其ItemsPanel和一个适当的ItemContainerStyleItemTemplate ,它们分别绑定到适当的视图模型属性。 它可能看起来像这样:

                

样式设置器中没有绑定的替代方法(在UWP中不起作用)可能如下所示:

                 

您可以将矩形集合绑定到ItemControl并设置其高度,宽度和边距:

          

只是一个让你入门的想法……