【发布时间】:2014-04-25 23:10:02
【问题描述】:
我使用 WPF (C#) 已经六个月了。我已经尝试了所有可以在网上找到的方法,但都没有运气。当我向 listView ItemsSource (DataTable) 添加新行时,它会作为最后一行添加到末尾。问题是我需要它作为第一行位于顶部,所以在添加它之后我想以编程方式重新排序它,以便新行位于顶部。我尝试过的方法没有任何错误,只是不起作用。
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集合(DataTable)并添加一行:
DataView collection = (DataView)MyListView.ItemsSource;
DataRowView drv = collection.AddNew();
drv["position"] = 1;
我尝试过的方法:
方法一:(position为数据表列名,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";
非常感谢任何帮助,谢谢。
【问题讨论】:
标签: c# wpf listview sorting datatable