C# 将IsSelected属性添加到EF POCO

C# 将IsSelected属性添加到EF POCO,c#,silverlight,wcf,inheritance,casting,C#,Silverlight,Wcf,Inheritance,Casting,我有一个WCF服务,它使用EF将数据传递给我的Silverlight应用程序。我需要让用户从绑定到可观察集合的组合框中选择多个项目。我正在尝试向Silverlight一侧的POCO添加一个IsSelected属性,以跟踪选择了哪些项目 我创建了一个名为SHOPSelect的类,该类继承自SHOP并添加了一个IsSelected属性。然后,我将绑定到组合框的列表更改为该类型 我的问题是试图从WCF中获取数据作为ObservableCollection,并将其转换为扩展类ObservableColl

我有一个WCF服务,它使用EF将数据传递给我的Silverlight应用程序。我需要让用户从绑定到
可观察集合的组合框中选择多个项目。我正在尝试向Silverlight一侧的POCO添加一个IsSelected属性,以跟踪选择了哪些项目

我创建了一个名为SHOPSelect的类,该类继承自SHOP并添加了一个IsSelected属性。然后,我将绑定到组合框的列表更改为该类型

我的问题是试图从WCF中获取数据作为
ObservableCollection
,并将其转换为扩展类
ObservableCollection
的列表。我可以使用它来编译代码,但是在调试时,试图将SHOP转换为SHOPSelect时会抛出异常

Main.ShopList = new ObservableCollection<SHOPSelect>(e.Result.Cast<SHOPSelect>());
Main.ShopList=新的ObservableCollection(e.Result.Cast());
例外情况是:

无法将“SHOP”类型的对象强制转换为“SHOPSelect”类型


最好的方法是什么?

有几种技术可以解决您的问题。我假设您有一种带有SelectionMode=“Multiple”或“Extended”的列表框,您需要跟踪所选内容。有时我不得不在列表框中显示复选框

首先,针对您手头的问题,以这种方式构建一个新的可观察集合(您将需要SHOPSelect中的一个构造函数,该构造函数负责一个店铺:

Main.ShopList = new ObservableCollection<SHOPSelect>(
  from shop in e.Result select new SHOPSelect(shop));
另一种技术是重新设置ListBoxItemContainer的样式

  <ContentPresenter
          x:Name="contentPresenter"
          Content="{TemplateBinding Content}"
          ContentTemplate="{TemplateBinding ContentTemplate}"
          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
          Margin="{TemplateBinding Padding}"/>



与其继承新类型,不如扩展现有类型(分部类),添加您自己的“silverlight only”属性——在本例中为“IsSelected”。

您的主要功能是什么。ShopList是否是一个ObservableCollection,在这种情况下这是您的问题。谢谢!我使用分部类,将其添加到WCF的命名空间下
  <ContentPresenter
          x:Name="contentPresenter"
          Content="{TemplateBinding Content}"
          ContentTemplate="{TemplateBinding ContentTemplate}"
          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
          Margin="{TemplateBinding Padding}"/>
    <CheckBox x:Name="contentControl" 
       IsHitTestVisible="False" VerticalAlignment="Center" 
       HorizontalAlignment="Left" Margin="6,0,0,0" 
       IsChecked="{TemplateBinding IsSelected}">
        <ContentPresenter Margin="6,0,0,0" 
           x:Name="contentPresenter" 
           ContentTemplate="{TemplateBinding ContentTemplate}" 
           Content="{TemplateBinding Content}" 
           VerticalAlignment="Center" 
           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
    </CheckBox>