构建一个 WPF 应用程序并尝试使事情变得相当简单。
目的是我有一个绑定(bind)到 Observable 集合的数据网格。在后台运行的频繁任务将定期将项目添加到集合中,我希望这些项目立即显示在 UI 数据网格上。
我遇到的两个问题:
我的 Xaml - 稍后我将正确格式化数据网格。
<UserControl x:Class="FrontEnd.Views.ItemsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FrontEnd.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
DataContext="{Binding ViewModel, Source={StaticResource ViewModelLocator}}">
<Grid>
<DataGrid x:Name="Items"
HorizontalAlignment="Left"
Height="auto"
VerticalAlignment="Top"
Width="auto"
AutoGenerateColumns="True"
ColumnWidth="*"
ItemsSource="{Binding ExistingItems}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Title}" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
public ObservableCollection<Item> ExistingItems
{
get
{
return _existingItems;
}
private set
{
_existingItems = value;
//Raise PropertyChangedEvent?
}
}
第二个问题是在 DataLayer - Item 有一个 Group 表的外键,当我显示 Items 时,我想显示 Group 的名称,所以我的 DataLayer 中有以下内容ICollection items = _context.Items.Include(i => i.Group);
return items;
但是现在我想让 Items Observable,我不能这样做 - 我可以使用ObservableCollection items = _context.Items.Local;
return items;
返回一个不包含 Group 实体数据的 ObservableCollection,但是我需要单独获取 Group 数据并在 ViewModel 中进行基于代码的连接,而我不想这样做。return (ObservableCollection<Item>)_context.Items.Include(i => i.Group);
不出所料地在运行时失败。我觉得我在这两个问题上都遗漏了一些明显的东西。有人可以建议吗?
最佳答案
您应该 implement INotifyPropertyChanged
接口(interface)并提出PropertyChanged
来自 ExistingItems
的 setter 的事件属性,或者只是将新项目添加到 ObservableCollection<Item>
的现有实例中而不是创建一个新的:
ExistingItems.Clear();
foreach (vew newItem in collectionFromDal)
ExistingItems.Add(newItem);
您的 DAL 应该返回一个集合:_context.Items.Include(i => i.Group).ToArray();
或者new ObservableCollection<Item>(_context.Items.Include(i => i.Group));
理想情况下,您将创建 ObservableCollection<Item>
在客户端应用程序的 View 模型中。
关于c# - DbSet 和 ObservableCollection 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62797663/