2016-05-02 4 views
0

非常に単純なケースでDesignDataに苦労しています。 私は次のようなクラスが定義されているWindowsのユニバーサルプロジェクトWindowsでDesignDataを使用するユニバーサルコレクション

<UserControl 
... 
xmlns:local="clr-namespace:SimpleDataBind" 
... 
<UserControl.Resources> 
    <DataTemplate x:Key="SimpleListTemplate"> 
     <TextBox Text="{Binding Name}" /> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid> 
    <StackPanel Grid.Row="0" d:DataContext="{d:DesignData Source=./DesignData/Single.xaml}"> 
     <TextBox Text="{Binding Name}"/> 
    </StackPanel> 
    <ListView Grid.Row="1" d:DataContext="{d:DesignData Source=./DesignData/Multiple.xaml}" 
     ItemTemplate="{StaticResource SimpleListTemplate}" 
     ItemsSource="{Binding collection}"> 
    </ListView> 
</Grid> 

に、次の些細な制御を定義した:型ElementCollectionの

public class Element 
{ 
    public Element() { } 
    public string Name { get; set; } 
} 
public class ElementCollection : ObservableCollection<Element> 
{ 
    public ElementCollection() { } 
} 

要素「コレクションは」で定義されますcodeBehindは有効なBinding Sourceを指定します。

Single.xamlは簡単です:

<local:Element xmlns:local="clr-namespace:SimpleDataBind" Name="Single" /> 

複数も同様にそうである:Designerで見た場合

<local:ElementCollection xmlns:local="clr-namespace:SimpleDataBind" > 
    <local:Element Name="Multiple Pete" /> 
    <local:Element Name="Multiple George" /> 
    <local:Element Name="Multiple John" /> 
</local:ElementCollection> 

、我々は、上記の設計データが表示されるはずです。実際、コントロールはグリッドの最初の行に正しく名前として「シングル」を表示します。しかし、コントロールはグリッドの2番目の行に何も表示されません。私は明らかに何かを明らかに欠けている

...

答えて

0

OKは、最終的にはこれを考え出しました。ソリューションは、XAMLのランタイムオブジェクトにバインドされません。すなわち、上記の私のソースコードでは、要素

ItemsSource="{Binding}" 

ItemsSource="{Binding collection}" 

要素を置き換える次に、あなたは明らかに...ランタイム実行時のオブジェクトにバインドすることができます。

このように動作するのは興味深い(そしておそらくツールに精通している他の人には明らかです)、マイクロソフトのドキュメントは少し不明瞭で古くなっています(あなたがSilverlightドキュメントユニバーサルでは全く働きません)。

しかし、とにかく、これが誰かを助けることを願っています!

関連する問題