用于抽象集合的 EF6 继承和 WPF dataViewSource class
EF6 inheritance and WPF dataViewSource for collection of abstract class
我有以下带 EF 的模型
public abstract class Shape
{
public int Id { get; set;}
public string Name { get; set;}
public string Color { get; set;}
}
public class Rectangle: Shape
{
public double Width { get; set;}
public double Height { get; set;}
}
public class Circle: Shape
{
public double Radius {get; set;}
}
public class Holder
{
public int Id { get; set;}
...
public int SomeProperty { get;set;}
...
public ObservableCollection<Shape> MyShapes { get; set;}
}
public class Context: DBContext
{
...
public DBSet<Shape> Shapes { get; set;}
public DBSet<Holder> Holders { get; set;}
}
在 WPF 应用程序中使用它的最佳方式是什么以及如何为数据网格设置 dataviewSource?
我想要这样的东西:
- 显示所有 Holder 的主数据网格(或列表框或树视图)
- 当主数据网格的一个项目被选中时,第二个数据网格显示所有的 MyShapes,它们是矩形;第三个数据网格仅显示该项目的圆圈。
- 用户可以在数据网格上添加和删除行
例如我有代码隐藏
circleViewSource.Source =(holderViewSource.View.CurrentItem as Holder).MyShapes
rectangleViewSource.Source =(holderViewSource.View.CurrentItem as Holder).MyShapes
并进入 xaml 的资源 我有
<CollectionViewSource x:Key="circleViewSourceViewSource" d:DesignSource="{d:DesignInstance {x:Type Circle}, CreateList=True}"/>
<CollectionViewSource x:Key="rectangleViewSource" d:DesignSource="{d:DesignInstance {x:Type Rectangle}, CreateList=True}"/>
例如,我想在第二个数据网格中添加一个矩形时遇到问题。例外情况是数据网格尝试创建抽象 class 形状而不是矩形。
我在数据库中有三个 table(TPT 方法)(形状、矩形、圆形),因为我希望这两个形状具有不同的 ID 和名称。
我哪里做错了?
我在数据网格中禁用了 CanUserAddRows
CanUserAddRows="False"
并添加了两个按钮:第一个添加新的矩形,第二个添加新的圆形到所选持有人的我的形状集合中。
我还删除了 code.behind 中与 holderViewSource
的 CurrentItem 相关的部分。一切都可以在 xaml 中通过绑定和 DataTemplate 完成。
我有以下带 EF 的模型
public abstract class Shape
{
public int Id { get; set;}
public string Name { get; set;}
public string Color { get; set;}
}
public class Rectangle: Shape
{
public double Width { get; set;}
public double Height { get; set;}
}
public class Circle: Shape
{
public double Radius {get; set;}
}
public class Holder
{
public int Id { get; set;}
...
public int SomeProperty { get;set;}
...
public ObservableCollection<Shape> MyShapes { get; set;}
}
public class Context: DBContext
{
...
public DBSet<Shape> Shapes { get; set;}
public DBSet<Holder> Holders { get; set;}
}
在 WPF 应用程序中使用它的最佳方式是什么以及如何为数据网格设置 dataviewSource?
我想要这样的东西:
- 显示所有 Holder 的主数据网格(或列表框或树视图)
- 当主数据网格的一个项目被选中时,第二个数据网格显示所有的 MyShapes,它们是矩形;第三个数据网格仅显示该项目的圆圈。
- 用户可以在数据网格上添加和删除行
例如我有代码隐藏
circleViewSource.Source =(holderViewSource.View.CurrentItem as Holder).MyShapes
rectangleViewSource.Source =(holderViewSource.View.CurrentItem as Holder).MyShapes
并进入 xaml 的资源 我有
<CollectionViewSource x:Key="circleViewSourceViewSource" d:DesignSource="{d:DesignInstance {x:Type Circle}, CreateList=True}"/>
<CollectionViewSource x:Key="rectangleViewSource" d:DesignSource="{d:DesignInstance {x:Type Rectangle}, CreateList=True}"/>
例如,我想在第二个数据网格中添加一个矩形时遇到问题。例外情况是数据网格尝试创建抽象 class 形状而不是矩形。
我在数据库中有三个 table(TPT 方法)(形状、矩形、圆形),因为我希望这两个形状具有不同的 ID 和名称。
我哪里做错了?
我在数据网格中禁用了 CanUserAddRows
CanUserAddRows="False"
并添加了两个按钮:第一个添加新的矩形,第二个添加新的圆形到所选持有人的我的形状集合中。
我还删除了 code.behind 中与 holderViewSource
的 CurrentItem 相关的部分。一切都可以在 xaml 中通过绑定和 DataTemplate 完成。