我一直在使用WPF(C#)六个月。我已经尽了各种方式尝试在网上找到,但没有运气。当我向listView ItemsSource(DataTable)添加一个新行时,它会在最后一行添加到最后一行。问题是我需要它作为第一行的顶部,所以添加它后,我想以编程方式重新排序它,所以新行在顶部。我没有遇到任何我尝试过的方法的错误,但它不起作用。添加行后以编程方式重新排序ListView ItemsSource
XAML:
<ListView
ItemsSource="{Binding MyDataTable, Mode=TwoWay,
NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True,
UpdateSourceTrigger=PropertyChanged}"
x:Name=MyListView" Height="291">
<ListView.View>
<GridView x:Name="GridView1">
<GridViewColumn x:Name="ColumnToSort"
DisplayMemberBinding="{Binding Path=position}">
<!--<GridViewColumn.Header>
<GridViewColumnHeader Tag="position"/>
</GridViewColumn.Header>-->
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
我得到的ItemSource集合(数据表),并添加一行:
DataView collection = (DataView)MyListView.ItemsSource;
DataRowView drv = collection.AddNew();
drv["position"] = 1;
方法我试过:
方法1:(位置在数据表中的列名, MyDataTable是一个VM DP)
DataView view = MyViewModel.MyDataTable.DefaultView;
view.Sort = "position ASC";
方法#2(试过排序由标题标签道具也列名)
string sortby = header.Tag.ToString();
Sort(SortBy, ListSortDirection.Ascending);
private void Sort(string sortBy, ListSortDirection direction)
{
ICollectionView dataView =
CollectionViewSource.GetDefaultView(MyListView.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
方法#3:
DataView view = new DataView(MyViewModel.MyDataTable);
view.Sort = "position ASC";
方法#4:
MyViewModel.MyDataTable.DefaultView.Sort = "position ASC";
任何帮助非常感谢,谢谢。
默认情况下,WPF将绑定到'DefaultView',所以我认为这与OP已经做的事情没有任何区别。 – Matt
它已修复。我将itemsSource作为数据表,将行添加到数据表中(而不是数据视图),然后按照Mark的建议这样做: – KevinP
确定在输入注释或提交注释时不要将Enter键作为CR命中:)它是固定的。谢谢Mark!我将itemsSource作为数据表,将行添加到数据表(而不是数据视图),然后Mark建议我创建一个数据视图并对其进行排序。 – KevinP