wpf двусторонняя привязка не работает - PullRequest
0 голосов
/ 27 июля 2011

у меня есть

 <Grid Name="thisPage">
  <TextBlock Name="tbtb" />
  <ScrollViewer Name="sv4" Visibility="Hidden">
    <ItemsControl ItemsSource="{Binding}">
                 <ItemsControl.ItemTemplate>
                     <DataTemplate>
                       <TextBox Text="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged"/> 
                     </DataTemplate> 
                 </ItemsControl.ItemTemplate> 
             </ItemsControl>
   </ScrollViewer>
  </Grid>

в MainWindow.vb, у меня есть

movieArray as ObservableCollection(of Movie)

For i As Integer = 0 To 5 
        Me.movieArray.Add(New Movie(i)) 
    Next

Me.sv4.DataContext = Me.movieArray
Me.listBox5.DataContext = Me.movieArray

 Private Sub TextBox_TextChanged(sender As System.Object, e As System.Windows.Controls.TextChangedEventArgs)

        Me.tbtb.Text = ""
        For Each m As Movie In movieArray
            Me.tbtb.Text += p.Title.ToString + " ^ "
        Next
       End Sub

Class Movie
    Implements INotifyPropertyChanged

  Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged

    Private Sub NotifyPropertyChanged(ByVal info As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    End Sub

 Property Title As Integer
        Get
            Return Me._title
        End Get
        Set(value As Integer)
            Me._title = value
            If Not (value = _title) Then
                Me._title= value
                NotifyPropertyChanged("Title")
            End If
        End Set
    End Property 

для следующей страницыу меня есть,

 <Grid Name="nextPage" Visibility="Hidden" > 
            <ListBox Name="listBox5" >
            <ItemsControl ItemsSource="{Binding}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Title}"/>
                    </DataTemplate> 
                </ItemsControl.ItemTemplate> 
            </ItemsControl>
        </ListBox>
        </Grid > 

Чтобы изменить страницы, я просто переключаю видимость thisPage и nextPage, используя кнопки back, next.

IM не уверен, что я делаю неправильно: -

  1. listbox5 показывает только исходные значения, а не что-либо, измененное текстовыми полями.
  2. tbtb, однако может обновлять свои значения

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Я думаю, что проблема может быть в вашем установщике свойства 'Title'.

Я парень на C #, а не эксперт по VB ... но может показаться, что NotifyPropertyChanged никогда не вызовут.

value = _title всегда будет истинным, потому что вы просто установили Me._title = value в предыдущей строке кода.Таким образом, вы никогда не будете выполнять код в вашем операторе if.

0 голосов
/ 27 июля 2011

Почему вы используете Textoted evetn в двухстороннем связывании, вам не нужны такие вещи.Двустороннее связывание - это прямая привязка значений из вашего представления к свойству и из свойства к представлению

, поэтому не используйте событие textaged и повторите попытку.это будет работать.

...