gpt4 book ai didi

c# - 在 WPF 中使用 MVVM 将 n 个矩形添加到 Canvas

转载 作者:IT王子 更新时间:2023-10-29 04:51:54 25 4
gpt4 key购买 nike

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

View 模型:

RecognizedValueViewModel 
{
public ObservableCollection<BarcodeElement> 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;
}
}

矩形应该显示在我的主窗口的 Canvas 中:

<Canvas x:Name="Canvas_Image_Main">
<!-- Show rectangles here -->
</Canvas>

我会在代码中将矩形添加到 Canvas ,但我现在不知道在运行时有多少个矩形。有什么办法可以做到这一点?坦克你。

最佳答案

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

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<RectItem> RectItems { get; set; }
}

然后您将拥有一个使用 ItemsControl 可视化此类 Rect 项目集合的 View 。 ItemsControl 将有一个 Canvas 作为它的 ItemsPanel 和一个适当的 ItemContainerStyleItemTemplate,每个都绑定(bind)到适当的 View 模型属性。它可能看起来像这样:

<ItemsControl ItemsSource="{Binding RectItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Width="{Binding Width}" Height="{Binding Height}" Fill="Black"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

样式 setter 中没有绑定(bind)的替代方案(在 UWP 中不起作用)可能如下所示:

<ItemsControl ItemsSource="{Binding RectItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Width="{Binding Width}" Height="{Binding Height}" Fill="Black">
<Rectangle.RenderTransform>
<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
</Rectangle.RenderTransform>
</Rectangle>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

关于c# - 在 WPF 中使用 MVVM 将 n 个矩形添加到 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22324359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com