2012-01-16 83 views
1

我有一个使用EF将数据传递到我的Silverlight应用程序的WCF服务。我需要让用户从绑定到ObservableCollection<SHOP>的组合框中选择多个项目。我正在尝试在Silverlight端添加一个IsSelected属性到POCO,以跟踪哪些项目被选中。将IsSelected属性添加到EF POCO

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

我的问题是试图从WCF获取数据作为ObservableCollection<SHOP>并将其转换为我的扩展类ObservableCollection<SHOPSelect>的列表。我可以使用此代码进行编译,但在调试时会尝试将SHOP转换为SHOPSelect。

Main.ShopList = new ObservableCollection<SHOPSelect>(e.Result.Cast<SHOPSelect>()); 

例外情况是:

无法转换类型 'SHOP' 的对象为类型 'SHOPSelect'。

这样做的最佳方法是什么?

+0

什么是你的Main.ShopList是一个ObservableCollection 在这种情况下,这是你的问题。 – 2012-01-16 21:17:51

回答

2

有几种技术可以解决您的问题。我假设你有一些SelectionMode =“Multiple”或“Extended”的列表框,你需要跟踪选择的内容。我必须在列表框中显示复选框来做到这一点。

首先,手头的问题,建立一个新的观察集合这种方式(你需要在SHOPSelect一个构造函数一个SHOP:

Main.ShopList = new ObservableCollection<SHOPSelect>(
    from shop in e.Result select new SHOPSelect(shop)); 

另一种方法是使用部分类定义IsSelected

public partial class SHOP 
{ 
    public bool IsSelected {get; set;} 
} 

另一种技术是再整的ListBoxItemContainer微软使用的默认模板是在这里:。http://msdn.microsoft.com/en-us/library/cc278062(v=VS.95).aspx通过更换

修改ListBoxItem的风格3210
<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> 
+0

谢谢!我使用了部分类,并将其添加到WCF的名称空间下 – msmucker0527 2012-01-17 13:52:55

1

而不是继承一个新的类型,只是延长添加自己的“Silverlight的唯一”属性中的现有类型(局部类) - 在这种情况下,“IsSelected”。