Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何绑定形状';将属性转换为业务模型';s属性_C#_Wpf_Mvvm_Binding - Fatal编程技术网

C# 如何绑定形状';将属性转换为业务模型';s属性

C# 如何绑定形状';将属性转换为业务模型';s属性,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,我有一个代表用户显示的画布。 在画布上,您可以绘制和调整代表屏幕部分的矩形 我有一个叫Section的模型。我的viewmodel有一个集合 我想在每次绘制矩形或更新(调整大小/删除)时以某种方式绑定并自动创建/更新列表 我的Section.cs看起来像这样。 public class Section { public int SectionId { get; set; } public int Width { get; set; } pu

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

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

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

我的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将在相应的部分中更新
我不知道如何将一个矩形绑定到一个部分,以便将它们链接起来。当用户选择前一段时间创建的矩形时,代码应该自动知道要更新哪个部分


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

在ViewModel中创建一个可观察的截面类型对象集合

ObservableCollection<Section> _col;
public ObservableCollection<Section> Sections
{
    get { return _col; }
    set
    {
        _col = value;
        OnPropertyChanged("Sections");
    }
}
observetecollection\u col;
公共收集组
{
获取{return\u col;}
设置
{
_col=值;
财产变更(“部分”);
}
}
并将其绑定到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>

在ViewModel中创建截面类型对象的可观察集合

ObservableCollection<Section> _col;
public ObservableCollection<Section> Sections
{
    get { return _col; }
    set
    {
        _col = value;
        OnPropertyChanged("Sections");
    }
}
observetecollection\u col;
公共收集组
{
获取{return\u col;}
设置
{
_col=值;
财产变更(“部分”);
}
}
并将其绑定到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>


看起来不错。但是我如何访问画布?在我的旧代码中,我命名了canvas,并为绘图部分提供了一系列事件处理程序的代码。canvas\u canvas=itemsControl.ItemsPanel.LoadContent()作为canvas;看起来不错。但是我如何访问画布?在我的旧代码中,我命名了canvas,并为绘图部分提供了一系列事件处理程序的代码。canvas\u canvas=itemsControl.ItemsPanel.LoadContent()作为canvas;