1

我有一个代表用户显示的画布。在画布上,您可以绘制代表屏幕各部分的矩形并调整其大小。

我有一个名为 Section 的模型。我的视图模型有它们的集合。

我想在List<Section>每次绘制或更新(调整大小/删除)矩形时以某种方式绑定并自动创建/更新。

我的 Section.cs 看起来像这样。

public class Section
    {
        public int SectionId { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public int X { get; set; }
        public int Y { get; set; }
        public SectionType SectionType { get; set; }

        [ForeignKey("Layout")]
        public int LayoutId { get; set; }   
        [ForeignKey("LayoutId")]
        public virtual Layout Layout { get; set; }
    }

所以实际上我希望发生以下情况:

新部分:

  • 用户在画布上绘制一个矩形
  • 创建了一个新部分,并将其添加到列表中
  • Section 从矩形中获取 Width、Height、X、Y 等

现有部分

  • 用户选择一个矩形并调整它的大小
  • 新的 Width、Height、X 和 Y 在相应的 Section 中更新

我不知道如何将 Rectangle 绑定到 Section 以便它们被链接。当用户选择一个不久前创建的 Rectangle 时,代码应该自动知道要更新哪个 Section。

非常感谢任何有关如何通过最佳实践解决此问题的正确方向的指示。

4

1 回答 1

1

在 ViewModel 中创建 Section 类型对象的 ObservableCollection。

ObservableCollection<Section> _col;
public ObservableCollection<Section> Sections
{
    get { return _col; }
    set
    {
        _col = value;
        OnPropertyChanged("Sections");
    }
}

并将其绑定到您的 XAML 中,如下所示

<ItemsControl Name="itemsControl" ItemsSource="{Binding Path=Sections}">
<ItemsControl.ItemsPanel>
     <ItemsPanelTemplate>
          <Canvas Background="White" Width="500" Height="500"  />
     </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Rectangle Fill="Red" Width="{Binding Width}" Height="{Binding Height}" />
    </DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemContainerStyle>
    <Style>
        <Setter Property="Canvas.Top" Value="{Binding Path=Y}" />
        <Setter Property="Canvas.Left" Value="{Binding Path=X}" />
    </Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
于 2013-07-19T15:40:30.760 回答