wpf двусторонняя привязка не работает
Я имею
<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, используя кнопки назад, next.
Я не уверен, что я делаю неправильно, как: -
- listbox5 показывает только исходные значения, а не что-либо, измененное текстовыми полями.
- tbtb, однако может обновлять свои значения
2 ответа
Я думаю, что проблема может быть в вашем свойстве 'Title'.
Я парень на C#, а не эксперт по VB... но может показаться, что NotifyPropertyChanged никогда не вызовут.
value = _title
всегда будет правдой, потому что вы просто установите Me._title = value
в предыдущей строке кода. Таким образом, вы никогда не будете выполнять код в своем операторе if.
Почему вы используете Textaged evetn в двухстороннем связывании, вам не нужны такие вещи. двусторонняя привязка - это прямая привязка значений из вашего представления к свойству и из свойства к представлению
так что не используйте текстовое событие и попробуйте снова. это будет работать