数据形式字段不会出现

时间:2010-01-14 19:46:21

标签: silverlight silverlight-3.0 dataform

我正在尝试学习如何使用Silverlight 3 DataForm 控件,因为我需要在XAML代码中自己定义DataForm字段,也就是说,我不想使用AutoGenerateFields属性。

我的问题是:当AutoGenerateFields设置为true时,数据形式工作正常,但是当我创建一个DataForm并手动设置字段并运行应用程序时,我得到的是一个空的空白矩形,其中我的表单及其字段应该是。< / p>

我创建了一个空白的Silverligh导航应用程序来测试它,下面是Home.xaml页面的代码:

<Grid x:Name="LayoutRoot">

    <StackPanel>

        <!-- This doesn't work. It renders a blank rectangle -->
        <dataFormToolkit:DataForm x:Name="DataForm">
            <dataFormToolkit:DataForm.EditTemplate>
                <DataTemplate>
                    <StackPanel dataFormToolkit:DataField.IsFieldGroup="True">
                        <dataFormToolkit:DataField>
                            <TextBox Text="Test1" />
                        </dataFormToolkit:DataField>
                        <dataFormToolkit:DataField>
                            <TextBox Text="Test2" />
                        </dataFormToolkit:DataField>
                        <dataFormToolkit:DataField>
                            <TextBox Text="Test3" />
                        </dataFormToolkit:DataField>
                    </StackPanel>
                </DataTemplate>
            </dataFormToolkit:DataForm.EditTemplate>
        </dataFormToolkit:DataForm>

        <!-- This works. -->
        <dataFormToolkit:DataForm x:Name="DataForm2"/>

    </StackPanel>

</Grid>

<Grid x:Name="LayoutRoot"> <StackPanel> <!-- This doesn't work. It renders a blank rectangle --> <dataFormToolkit:DataForm x:Name="DataForm"> <dataFormToolkit:DataForm.EditTemplate> <DataTemplate> <StackPanel dataFormToolkit:DataField.IsFieldGroup="True"> <dataFormToolkit:DataField> <TextBox Text="Test1" /> </dataFormToolkit:DataField> <dataFormToolkit:DataField> <TextBox Text="Test2" /> </dataFormToolkit:DataField> <dataFormToolkit:DataField> <TextBox Text="Test3" /> </dataFormToolkit:DataField> </StackPanel> </DataTemplate> </dataFormToolkit:DataForm.EditTemplate> </dataFormToolkit:DataForm> <!-- This works. --> <dataFormToolkit:DataForm x:Name="DataForm2"/> </StackPanel> </Grid>

为了使第二个DataForm工作,我只创建了一个Person类,并将以下内容放在 Home.xaml.cs 中:



您可以看到运行应用程序时会发生什么:

screenshot

有谁知道什么是错的?提前谢谢。

3 个答案:

答案 0 :(得分:3)

为了得到一些东西,我必须添加:

        DataForm.CurrentItem = client;

代码。

这只显示了三个没有标签的文本框,条目为“Test1”,“Test2”和“Test3”。这是你期待的吗?

Silverlight Toolkit示例页面有一个模板驱动数据表单示例,它的XAML如下所示:

        <dataform:DataForm x:Name="dataForm" ItemsSource="{Binding}" HorizontalAlignment="Left" MinWidth="400" MaxWidth="500" Margin="4" Grid.Column="1">
            <dataform:DataForm.EditTemplate>
                <DataTemplate>
                    <StackPanel>
                        <dataform:DataField>
                            <TextBox Text="{Binding FirstName, Mode=TwoWay}" />
                        </dataform:DataField>
                        <dataform:DataField>
                            <TextBox Text="{Binding Email, Mode=TwoWay}" />
                        </dataform:DataField>
                        <dataform:DataField>
                            <TextBox Text="{Binding Phone, Mode=TwoWay}" />
                        </dataform:DataField>
                        <dataform:DataField Label="Calendar">
                            <controls:Calendar></controls:Calendar>
                        </dataform:DataField>
                    </StackPanel>
                </DataTemplate>
            </dataform:DataForm.EditTemplate>
        </dataform:DataForm>

还有一句话:

        DataContext = Contact.People;

在后面的代码中。 (就我能解决的问题,班级People在其他地方定义)

答案 1 :(得分:1)

我还发现,在表单出现之前需要绑定某些东西是非常令人惊讶的。

如果您尝试绑定到单个项目,则需要执行此操作:

 CurrentItem="{Binding Customer}"

或 - 如果您在用户控件中,只需

 CurrentItem="{Binding}"

然后在父控件中

<my:AddressControl DataContext="{Binding Customer}"/>

以下是完整的数据表:

<dt:DataForm Name="dfAddress" AutoGenerateFields="False" CurrentItem="{Binding}">
    <dt:DataForm.EditTemplate>
        <DataTemplate>

            <StackPanel>
                <dt:DataField Label="First Name">
                    <TextBox Text="{Binding FirstName, Mode=TwoWay}" Style="{StaticResource FieldTextBoxStyle}" HorizontalAlignment="Stretch" IsReadOnly="False" HorizontalContentAlignment="Stretch" />
                </dt:DataField>
                <dt:DataField Label="Last Name">
                    <TextBox Text="{Binding LastName, Mode=TwoWay}" Style="{StaticResource FieldTextBoxStyle}" HorizontalContentAlignment="Stretch" />
                </dt:DataField>
             </StackPanel>
         </DataTemplate>
  </dt:DataForm.EditTemplate>
</dt:DataForm>

答案 2 :(得分:0)

你可以在xaml中给出CurrentItem =“”。通过这种方式,您不需要将它实际绑定到任何东西,同时,对数据形式的工作看起来是:)