0

我創建了一個包含ObservableCollection類型屬性的類。我正在嘗試在XAML中創建該類的實例,並使用成員填充此屬性。我不斷得到一個異常,類T不能轉換爲ObservableCollection,但是這種異常只發生在我試圖用聲明爲靜態資源的元素填充列表時。使用靜態資源在XAML中填充ObservableCollection類型的屬性

有人有一個想法,爲什麼?

的代碼如下:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mseg="clr-namespace:SegApp.Model.DataEntities.Segments;assembly=SegApp.Model.Silverlight"> 

         <mseg:Dot xKey="d1"/> 
         <mseg:Dot xKey="d2"/> 
         <mseg:Dot xKey="d3"/> 
         <mseg:Dot xKey="d4"/> 

         <mseg:Segment xKey="seg1"> 
          <mseg:Segment.Dots> 
            <StaticResource ResourceKey="d1"/> 
            <StaticResource ResourceKey="d2"/> 
            <StaticResource ResourceKey="d3"/> 
            <StaticResource ResourceKey="d4"/> 
          </mseg:Segment.Dots> 
         </mseg:Segment> 
</ResourceDictionary> 

類定義是:

public class Segment : Part 
{ 
    public ObservableCollection<Dot> Dots { get; set; } 

    public Segment() 
    { 
     Dots = new ObservableCollection<Dot>(); 
    } 
} 

和異常說: 「類型bla.bla.bla的

對象.Dot不能 轉換爲 System.Collections.ObjectModel.O bservableCollection'1 [bla.bla.bla.Dot]

任何想法?

回答

0

正如你的代碼,集合中的每個元素必須是一個點,而不是資源... 在XAML代碼列表中的每個條目必須是像 或者是嘗試 someValue中 或 { staticResource xxx}

但還是有問題。第一種語法是好的,第二種語法可以工作,如果Dot有簡單的內容,但第三種語法不能運行:tag意思是「創建Dot的一個實例」。而StaticResource的意思是「創建..的一個實例,並給它一個關鍵」。 因此,最後的語法肯定無法正常工作,因爲您可以使用來自資源的實例替換標記創建的實例...

但請試一試。你的代碼中的主要問題是你試圖感受Dot with Resource的集合,這不能工作,編譯器也不行。嘗試使用標籤來創建條目。然後打了一下,看是否可以參考的地方在這些標籤的資源..

0

爲了使用集合XAML語法改變你的財產,並刪除它的設置方法:

public class Segment : DependencyObject 
{ 
    private readonly ObservableCollection<Dot> _dots = new ObservableCollection<Dot>(); 
    public ObservableCollection<Dot> Dots 
    { 
     get { return _dots; } 
    } 
}