2

Silverlight TwoWay バインディングの仕組みによると、FirstName フィールドのデータを変更すると、CheckFirstName フィールドの値が変更されるはずです。

そうでないのはなぜですか?

答え:

ジェフに感謝します、それでした、他の人のために:ここにダウンロード可能なコードを含む完全なソリューションがあります.

XAML:

<StackPanel>
    <Grid x:Name="GridCustomerDetails">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="300"/>
        </Grid.ColumnDefinitions>

        <TextBlock VerticalAlignment="Center" Margin="10" Grid.Row="0" Grid.Column="0">First Name:</TextBlock>
        <TextBox Margin="10" Grid.Row="0" Grid.Column="1" Text="{Binding FirstName, Mode=TwoWay}"/>

        <TextBlock VerticalAlignment="Center" Margin="10" Grid.Row="1" Grid.Column="0">Last Name:</TextBlock>
        <TextBox Margin="10" Grid.Row="1" Grid.Column="1" Text="{Binding LastName}"/>

        <TextBlock VerticalAlignment="Center" Margin="10" Grid.Row="2" Grid.Column="0">Address:</TextBlock>
        <TextBox Margin="10" Grid.Row="2" Grid.Column="1" Text="{Binding Address}"/>

    </Grid>

    <Border Background="Tan" Margin="10">
        <TextBlock x:Name="CheckFirstName"/>
    </Border>

</StackPanel>

コードビハインド:

public Page()
{
    InitializeComponent();

    Customer customer = new Customer();
    customer.FirstName = "Jim";
    customer.LastName = "Taylor";
    customer.Address = "72384 South Northern Blvd.";

    GridCustomerDetails.DataContext = customer;

    Customer customerOutput = (Customer)GridCustomerDetails.DataContext;
    CheckFirstName.Text = customer.FirstName;

}
4

3 に答える 3

5

プロパティ値がいつ変更されたかをバインディングが認識できるようにするには、Customer型がサポートされている必要があります。INotifyPropertyChangedFirstName

このチュートリアルは、コードを機能させるのに役立つ場合があります。

于 2009-02-16T15:21:09.063 に答える
1

Grid コンテナー内のコントロールは、FirstName、LastName、および Address が何であるかを認識していません。コードビハインドでグリッドをオブジェクトにバインドする必要があると思います:

<Grid x:Name="GridCustomerDetails" DataContext="Customer"> 

これで、そのコンテナー内のすべてのコントロールを Customer のプロパティにバインドできます。次のようにバインドします。

<TextBox Margin="10" Grid.Row="0" Grid.Column="1" 
         Text="{Binding Path=FirstName, Mode=TwoWay}"/>   

コード ビハインドで、「Customer」がクラス オブジェクトであり、パブリックに宣言されていることを確認してください。

これが機能しない場合は、上部のページ宣言と名前空間に x:Name="" を追加してみてください。

これが役立つことを願っています!

于 2012-02-20T14:49:26.850 に答える