3

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

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

我创建了一个空白的 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>

为了使第二个 DataForm 工作,我简单地创建了一个 Person 类,并将以下内容放入Home.xaml.cs


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    Person client = new Person { Age = 10, DateOfBirth = new DateTime(1980, 10, 20), FirstName = "John", LastName = "Doe" };
    DataForm2.CurrentItem = client;
}

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

截屏

有谁知道出了什么问题?先感谢您。

4

3 回答 3

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在其他地方定义)

于 2010-01-14T20:15:20.320 回答
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>
于 2010-03-25T00:04:10.550 回答
0

您可以在 xaml 中给出 CurrentItem=""。这样,您不需要将其实际绑定到任何东西,同时,处理数据表单看起来:)

于 2012-07-29T12:49:22.003 回答