Проблема в привязке данных в WP7 - PullRequest
0 голосов
/ 10 февраля 2012

Это действительно странная проблема, это последняя страница, над которой я работал, я делал ObservableCollection ListBox для добавления данных в текстовые блоки и изображения и связывания данных.

Но на этот раз у меня есть только 1 TextBlock и 1 Image, которые мне нужны для привязки к нему данных. В файле .cs я не могу получить к ним прямой доступ, а также DataBinding не работает.

Xaml:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <TextBlock Text="{Binding lastName}" Height="33" Margin="0,175,8,0" TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Right" Width="336" />
        <ListBox ItemsSource="{Binding lastAddress}" Margin="8,291,8,8"/>
        <TextBlock HorizontalAlignment="Left" Height="33" Margin="8,0,0,0" TextWrapping="Wrap" Text="Restaurant Profile: " VerticalAlignment="Top" Width="225" TextDecorations="Underline" Foreground="#FF7A0100" FontSize="24"/>
        <Image Source="{Binding lastImage}" Height="132" Margin="8,37,292,0" VerticalAlignment="Top" Stretch="None"/>
    </Grid>

Любая помощь? Спасибо.

1 Ответ

0 голосов
/ 10 февраля 2012

Похоже, у вас здесь есть пара потенциальных проблем.Прежде всего, если вы хотите получить доступ к своим элементам управления из вашего файла codebehind .cs, вам нужно дать имена элементов управления, например:

<Grid Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <TextBlock Name="MyTextBlock" />
</Grid>

Затем они доступны в вашем коде позади:

public MainPage()
{
    InitializeComponent();
    DoStuff();
}

private void DoStuff() 
{
    MyTextBlock.Text = "Hey, it works!";
}

Во-вторых, чтобы заставить работать привязку данных, вам нужно установить DataContext для вашей страницы, либо в XAML, либо в вашем файле codebehind.

В файле codebehind выможет сделать это так:

public MainPage()
{
    InitializeComponent();
    LayoutRoot.DataContext = this;
}

Что позволяет вам привязывать данные следующим образом:

<Grid Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <TextBlock Name="MyTextBlock" Text="{Binding MyProperty}"/>
</Grid>
...