wpf - 如何将 CollectionViewSource 绑定到 DataGrid
问题描述
我有一个数据网格,想将其项目源绑定为 CollectionViewSource,它具有 List 的源。但是绑定不起作用。请在下面检查我的代码。请注意,由于分组时的虚拟化问题,我不想使用 ObservableCollection。
<UserControl.Resources>
<CollectionViewSource x:Key="weightItemCollection" Source="{Binding Path=LoadCaseWeightItems}" >
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="LocalizedGroupName"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="LocalizedGroupName"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</UserControl.Resources>
<DataGrid x:Name="customLoadCaseGrid"
ItemsSource="{Binding Source={StaticResource weightItemCollection}}" />
用户控制代码
public partial class WeightItem : INotifyPropertyChanged
{
List<WeightItemData> loadCaseWeightItems;
public List<WeightItemData> LoadCaseWeightItems { get { return loadCaseWeightItems; } set { loadCaseWeightItems = value; OnPropertyChanged(nameof(LoadCaseWeightItems)); } }
public event PropertyChangedEventHandler PropertyChanged;
public WeightItem()
{
InitializeComponent();
loadCaseWeightItems = new List<WeightItemData>();
//Here i add items to loadCaseWeightItems
}
protected virtual void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
解决方案
这应该有效:
<UserControl.Resources>
<CollectionViewSource x:Key="weightItemCollection"
Source="{Binding Path=LoadCaseWeightItems,RelativeSource={RelativeSource AncestorType=UserControl}}" >
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="LocalizedGroupName"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="LocalizedGroupName"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</UserControl.Resources>
<Grid>
<DataGrid x:Name="customLoadCaseGrid" ItemsSource="{Binding Source={StaticResource weightItemCollection}}" />
</Grid>
您还可以以Source
编程方式设置:
public WeightItem()
{
InitializeComponent();
loadCaseWeightItems = ...;
((CollectionViewSource)Resources["weightItemCollection"]).Source = loadCaseWeightItems;
}
推荐阅读
- swift - 从数值泛型返回 Double 的平均值扩展
- nginx - 添加删除 .html 扩展名的选项后,闪亮的服务器重定向停止工作
- matlab - 使矩形跟随轨迹
- javascript - 如何在反应中获取json api中的图像?
- django - 如何在 django-filter 中使用范围滑块
- python - 试图改变机器人的状态
- neo4j - Neo4j - 通过关系创建导入数百万数据
- javascript - 如何在 javascript Object.assign 方法中使用所有函数参数
- .net - IEnumerable.Min() 使用通用对象返回奇怪的结果
- mysql - 我可以选择每一行并限制具有不同值的行吗?