2012-01-16 81 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」。