如何将形状的属性绑定到业务模型的属性

时间:2013-07-19 15:29:55

标签: c# wpf mvvm binding

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

我有一个名为Section的模型。我的viewmodel有一个集合。

每当绘制或更新(调整大小/删除)矩形时,我想以某种方式绑定并自动创建/更新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; }
    }

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

新版块

  • 用户在画布上绘制一个矩形
  • 创建一个新的部分,并将其添加到列表
  • 该部分从矩形
  • 获取宽度,高度,X,Y等

现有部分

  • 用户选择矩形并调整其大小
  • 新的宽度,高度,X和Y在相应的章节
  • 中更新

我无法弄清楚如何将Rectangle绑定到Section以便它们被链接。当用户选择刚刚创建的Rectangle时,代码应该自动知道要更新的Section。

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

1 个答案:

答案 0 :(得分: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>