Поля формы данных не появятся - PullRequest
3 голосов
/ 14 января 2010

Я пытаюсь узнать, как использовать элемент управления Silverlight 3 DataForm , поскольку мне нужно самому определять поля DataForm в коде XAML, то есть я не хочу использовать свойство AutoGenerateFields .

Моя проблема: форма данных работает отлично, когда AutoGenerateFields установлен в true, но когда я создаю DataForm, устанавливаю поля вручную и запускаю приложение, все, что я получаю, это пустой пустой прямоугольник, где должна быть моя форма и ее поля. 1005 *

Я создал пустое навигационное приложение Silverligh, чтобы проверить это, и ниже приведен код страницы Home.xaml:

</p> <pre><code><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 :

<code>
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;
}

Вы можете увидеть, что происходит, когда я запускаю приложение:

screenshot

Кто-нибудь знает, что не так? Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 14 января 2010

Чтобы что-то появилось, мне пришлось добавить:

        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 голос
/ 25 марта 2010

Мне также показалось довольно удивительным, что вам нужно привязать что-то еще до того, как форма появится.

Если вы пытаетесь привязать к одному предмету, вам нужно сделать следующее:

 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>
0 голосов
/ 29 июля 2012

Вы можете указать CurrentItem = "" в xaml. Таким образом, вам не нужно фактически связывать его с чем-либо, и в то же время работа над формой данных выглядит так:)

...