如何在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}" " />

如何在UI中更新ObservableCollection

您需要确保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");
    }
}

从你的更新看来,你已经得到了ItemsSourceTextBlock的绑定正确。但是,您是否设置了视图的DataContext ?