来自 Linq 的可观察集合

本文关键字:观察 集合 Linq 来自 | 更新日期: 2023-09-27 18:32:38

有人可以看到我需要在这里更改的内容吗?我正在显示 AddressTypeClass 项的可观察集合。 对象项而不是数据显示在列表框中。 我可以在调试模式下看到对象中的数据。

XAML.CS 文件:

DataContext MyTableDataContext = new MyTableDataContext();
ObservableCollection<AddressTypeClass> theOC = new ObservableCollection<AddressTypeClass>(new MyTableDataContext().AddressTypes.AsEnumerable()
        .Select(lt => new AddressTypeClass
        {
          AddressTypeID = lt.AddressTypeID,
          AddressType = lt.AddressType,
        })
          .ToList());
this.listBox1.ItemsSource = theOC;

XAML 文件:

<ListBox Name="listBox1" Margin="8" Height ="200" Width ="150" FontSize="12" Foreground="#FF2F3806"  ItemsSource="{Binding AddressType}" IsSynchronizedWithCurrentItem="True" >
    </ListBox> 

来自 Linq 的可观察集合

您需要将 ItemTemplate 添加到您的列表框中,例如

<ListBox Name="listBox1" Margin="8" Height ="200" Width ="150" FontSize="12" Foreground="#FF2F3806"  ItemsSource="{Binding AddressType}" IsSynchronizedWithCurrentItem="True" >
   <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <TextBlock Text="{Binding Path=AddressType}" />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

你可以使用我的 ObservableComputings 库来增强你的代码。在您的代码中,每次MyTableDataContext.AddressTypes dbSet(我假设您正在使用EntityFramework)更改(新项或删除)或属性(AddressType.AddressTypeID,AddressType.AddressType)更改时,您都会手动更新OC。使用地址类型,您可以自动执行该过程:

DataContext MyTableDataContext = new MyTableDataContext();
ObservableCollection<AddressTypeClass> theOC = MyTableDataContext.AddressTypes.Local
        .Selecting(lt => new AddressTypeClass
        {
          AddressTypeID = lt.AddressTypeID,
          AddressType = lt.AddressType,
        });
this.listBox1.ItemsSource = theOC;

OC 是 ObservableCollection,反映了 MyTableDataContext.AddressTypes.Local 集合和上面代码中提到的属性中的所有更改。确保上述代码中提到的所有属性都通过 INotifyProperytChanged 接口通知更改。