0

タイプ ObservableCollection のプロパティを含むクラスを作成しました。XAML でクラスのインスタンスを作成し、このプロパティにメンバーを入力しようとしています。クラス T を 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.ObservableCollection'1[bla.bla.bla.Dot] に変換できません

"

何か案は?

4

2 に答える 2

0

コードと同様に、コレクションの各要素はリソースではなくドットである必要があります... xamlコードのリストの各エントリは、somevalueまたは{staticResourcexxx}のようなものである必要があります。

しかし、まだ問題があります。最初の構文は問題ありません。2番目の構文はDotの単純なコンテンツがある場合は機能しますが、3番目の構文は実行できません。:tagは「Dotのインスタンスを作成する」ことを意味します。また、StaticResourceは、「..のインスタンスを作成し、それにキーを与える」ことを意味します。したがって、タグによって作成されたインスタンスをリソースからのインスタンスに置き換えることができるため、最後の構文は確かに機能しません...

しかし、それを試してみてください。コードの主な問題は、Dot with Resourceのコレクションを感じようとしていることです。これは機能せず、コンパイラは正常ではありません。タグを使用してエントリを作成してみてください。次に、少し遊んで、これらのタグのどこかでリソースを参照できるかどうかを確認します。

于 2011-02-28T21:58:57.133 に答える
0

コレクションの XAML 構文を使用するには、プロパティを変更してセッターを削除します。

public class Segment : DependencyObject
{
    private readonly ObservableCollection<Dot> _dots = new ObservableCollection<Dot>();
    public ObservableCollection<Dot> Dots
    {
        get { return _dots; }
    }
}
于 2011-02-28T22:55:03.537 に答える