将IsSelected属性添加到EF POCO
我有一个使用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'。
这样做的最佳方法是什么?
有几种技术可以解决您的问题。我假设你有一些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>
谢谢!我使用了部分类,并将其添加到WCF的名称空间下 – msmucker0527 2012-01-17 13:52:55
而不是继承一个新的类型,只是延长添加自己的“Silverlight的唯一”属性中的现有类型(局部类) - 在这种情况下,“IsSelected”。
什么是你的Main.ShopList是一个ObservableCollection在这种情况下,这是你的问题。 –
2012-01-16 21:17:51