如何在UI中更新ObservableCollection
本文关键字:更新 ObservableCollection UI | 更新日期: 2023-09-27 18:07:33
foreach (var t in ((App)App.Current).CollectionMessages)
if (t.Uid.ToString() == uid)
t.TexT = z;
CollectionMessages, filed TexT中的项将TexT更改为我想要的内容。但UI没有变化,它显示旧值。怎么了?请帮帮我。
Xaml: <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Margin="0,0,0,0">
<TextBlock Text="Диалоги" Style="{StaticResource PhoneTextNormalStyle}" FontSize="{StaticResource PhoneFontSizeLarge}"/>
</StackPanel>
<Grid Grid.Row="2">
<Grid d:LayoutOverrides="GridBox" >
<ListBox x:Name="mess_list" ItemsSource="{Binding}" >
<ListBox.ItemTemplate>
<DataTemplate >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding TexT}" " />
…
您需要确保t
为类型的类实现INotifyPropertyChanged
(MSDN),并在设置TexT
时触发PropertyChanged
事件。
您需要实现INotifyPropertyChanged
接口并引发属性更改事件,以便UI知道它必须更新。
这个How to:页面有一个工作示例。您基本上需要以下代码:
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
当你想要更新的东西发生变化时调用。所以TexT
的代码变成了:
private string localTexT
public string TexT
{
get { return localTexT; }
set
{
localTexT = value;
NotifyPropertyChanged("TexT");
}
}
从你的更新看来,你已经得到了ItemsSource
和TextBlock
的绑定正确。但是,您是否设置了视图的DataContext
?