0

在一个非常简单的案例中,我正在努力使用 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() { }
}

类型为 ElementCollection 的元素“集合”在 codeBehind 中定义,以提供有效的绑定源。

Single.xaml 很简单:

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

倍数同样如此:

<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 中查看时,我们应该看到上面的设计数据。确实,控制在网格的第一行中正确地将“单一”显示为名称。但是,控件在网格的第二行中没有显示任何内容。

我显然错过了一些明显的东西......

4

1 回答 1

0

好的,终于想通了。解决方案是不绑定到 XAML 中的运行时对象;即,在我上面的源代码中,替换元素

    ItemsSource="{Binding collection}"

与元素

    ItemsSource="{Binding}"

然后您显然可以在...运行时绑定到运行时对象。

它以这种方式工作有点有趣(对于其他更熟悉该工具的人来说可能很明显),并且 Microsoft 文档有点晦涩且过时(小伙子们想向您指出在 Silverlight 文档中不起作用的都在通用)。

但无论如何,希望这对某人有帮助!

于 2016-06-20T15:30:24.650 回答