我在DataGrid顶部有一个ComboBox,它绑定到LINQ to SQL映射的可观察集合。那就是我使用“拖放”方法将表格放入我的DataClasses,然后填充一个ObservableCollection。我想让组合框以最新的第一顺序(在名称字段中降序)呈现项目,但找不到任何要设置的属性。看起来像对可观察集合进行排序是错误的方法。我认为最简单的方法是使用存储过程而不是表作为LINQ to SQL类生成器。我错过了一些更简单的内置解决方案吗?
以下是将LINQ生成表添加到我的observable集合的类代码:
class ObservableTransmittals : ViewableCollection<Transmittal>
{
public ObservableTransmittals(DataClasses1DataContext dataDc)
{
foreach (Transmittal trn in dataDc.Transmittals)
{
this.Add(trn);
}
}
}
并且从下面开始使用它:
class ObservableTransmittals : ViewableCollection<Transmittal>
{
public ObservableTransmittals(DataClasses1DataContext dataDc)
{
var linq = dataDc.Transmittals.OrderByDescending(x => x.TransName);
foreach (Transmittal trn in linq)
{
this.Add(trn);
}
}
}
答案 0 :(得分:1)
在你的LINQ to Sql中
var linq = YourTable.OrderByDescending(x => x.Name).ToObservableCollection();
其中ToObservableCollection是自定义扩展方法。
E.g。
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> list)
{
return new ObservableCollection<T>(list);
}
修改强>
如果要自动添加到上下文或删除,则需要侦听基类的CollectionChanged事件。
class ObservableTransmittals : ObservableCollection<Transmittal>
{
private readonly YourContext _dataContext;
public ObservableTransmittals(YourContext dataContext)
{
var linq = dataContext.Transmittals.OrderByDescending(x => x.TransName);
foreach (Transmittal trn in linq)
{
this.Add(trn);
}
_dataContext = dataContext;
}
protected override void RemoveItem(int index)
{
_dataContext.Transmittals.Remove(this[index]);
base.RemoveItem(index);
}
protected override void InsertItem(int index, Transmittal item)
{
_dataContext.Transmittals.Add(item);
base.InsertItem(index, item);
}
protected override void SetItem(int index, Transmittal item)
{
// Add replace logic
base.SetItem(index, item);
}
}