Почему двусторонняя привязка в silverlight не работает? - PullRequest
2 голосов
/ 16 февраля 2009

В зависимости от того, как работает привязка 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;

}

Ответы [ 3 ]

5 голосов
/ 16 февраля 2009

Ваш тип Customer должен поддерживать INotifyPropertyChanged, чтобы привязка знала, когда изменилось значение свойства FirstName.

Этот учебник может помочь вам заставить ваш код работать.

1 голос
/ 20 февраля 2012

Ваши элементы управления внутри контейнера Grid понятия не имеют, что такое FirstName, LastName и Address. Я думаю, что вам нужно привязать вашу сетку к объекту в коде:

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

Теперь каждый элемент управления внутри этого контейнера может быть привязан к свойству Клиента. Вы связываете это так:

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

В своем коде убедитесь, что "Customer" является объектом класса и объявлен публично.

Если это не работает, попробуйте добавить x: Name = "" к объявлениям страниц и пространствам имен вверху.

Надеюсь, это поможет!

1 голос
/ 02 сентября 2011

решение - использовать привязку элемента для CheckFirstName

...