我一直在使用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