3

XAMLコードでDataFormフィールドを自分で定義する必要があるため、Silverlight 3 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>

2番目の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;

コードに。

これにより、ラベルのない 3 つのテキスト ボックスと、"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 に答える