我的WPF应用程序有一个ViewModel,该ViewModel有一个ObservableCollection,该集合保存Item
类型的对象。每个Item都有一种颜色和一个绘制在画布上的Rect:
项目分类:
public class Item
{
public Color ItemColor {get; set;}
public Rect ScaledRectangle {get; set;}
}
XAML:
<Grid>
<ItemsControl Name="Items" ItemsSource="{Binding Items, Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:ItemView Visibility="Visible">
<local:ItemView.Background>
<SolidColorBrush Color="{Binding ItemColor}"/>
</local:ItemView.Background>
</local:ItemView>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Canvas.Left" Value="{Binding ScaledRectangle.Left}"/>
<Setter Property="Canvas.Top" Value="{Binding ScaledRectangle.Top}"/>
<Setter Property="FrameworkElement.Width" Value="{Binding ScaledRectangle.Width}"/>
<Setter Property="FrameworkElement.Height" Value="{Binding ScaledRectangle.Height}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
在我的ViewModel中,我所要做的就是向ObservableCollection添加一个新的Item,以便将其绘制在屏幕上。
这样做效果很好,但现在我发现需要将ScaledRectangle属性更改为某种集合。我想修改此XAML以绘制ScaledRectangles集合中的每个矩形。是否可以修改此XAML,以便将ViewModel功能保留为类似viewModel.AddNewItem(newItem)
的内容?
1条答案
按热度按时间eivnm1vs1#
您必须修改
ItemsView
以支持处理Rect
的集合,而不是单个Rect
: