Использование DesignData в Windows Universal Collection

Я борюсь с DesignData в том, что должно быть очень простым делом. Я определил следующий тривиальный элемент управления в универсальном проекте Windows

<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>

Классы определены следующим образом:

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

Элемент 'collection' типа ElementCollection определен в codeBehind для предоставления действительного источника привязки.

Single.xaml тривиален:

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

Multiple одинаково так:

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

При просмотре в Designer мы должны увидеть данные дизайна выше. И действительно, Control показывает "Single" в качестве имени правильно в первом ряду таблицы. Однако элемент управления ничего не показывает во втором ряду таблицы.

Я явно упускаю что-то очевидное...

1 ответ

Решение

ОК, наконец-то понял это. Решение состоит не в том, чтобы связываться с объектом времени выполнения в XAML; т.е. в моем исходном коде выше замените элемент

    ItemsSource="{Binding collection}"

с элементом

    ItemsSource="{Binding}"

Тогда вы, очевидно, можете связываться с объектом времени выполнения в... время выполнения.

Интересно (и, возможно, очевидно, для других, более знакомых с инструментом), что он работает таким образом, и документация Microsoft немного неясна и устарела (ребята хотят указать вам на документы Silverlight, которые не работают на все в универсале).

Но в любом случае, надеюсь, это кому-то поможет!

Другие вопросы по тегам