所以我正在尝试学习 wpf 并将 ac# .net 表单项目重新编码为 wpf。同时我正在尝试解决我在表单项目中遇到的问题。其中之一是列未正确排序。有一列是“文件名”主列的字母数字列。我找到了一个我认为可以使用DataGrid CustomSorting的包, 但在用例中它会出错,我不知道它是否是由我如何绑定到 datagrid 或什么引起的。该项目没有太多文档。
出错的代码行
var listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);
错误
'Unable to cast object of type 'System.Windows.Data.BindingListCollectionView' to type 'System.Windows.Data.ListCollectionView'.'
完整的代码块
private static void HandleCustomSorting(object sender, DataGridSortingEventArgs e)
{
var dataGrid = (DataGrid)sender;
if (!GetUseCustomSort(dataGrid))
{
return;
}
if (string.IsNullOrEmpty(e.Column.SortMemberPath))
{
return;
}
var listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);
IComparer sorter = GetCustomSorter(e.Column);
if (sorter == null)
{
return;
}
listCollectionView.CustomSort = new ColumnComparer(sorter, e.Column);
e.Handled = true;
}
加载数据网格
private void PricingActiveCatagory_SelectedIndexChanged(object sender, EventArgs e)
{
string Dir1 = string.Format("{0}/Displays/{1}/{2}", SV.appPath, PricingActiveDisplay.SelectedValue.ToString(), PricingActiveCatagory.SelectedItem.ToString());
string[] fileList1 = Directory.GetFiles(Dir1);
if (fileList1.Length > 0)
{
var conn = new SQLiteConnection(string.Format("data source ={0}/database/{1}.sqlite;Version=3;New=True;Compress=True;", SV.appPath, PricingActiveDisplay.SelectedValue.ToString()));
dt.Clear();
dt.Columns.Clear();
dt = new DataTable();
try
{
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(da);
using (conn)
{
conn.Open();
dt.Rows.Clear();
if (Sqlite.TableExists(PricingActiveCatagory.SelectedItem.ToString(), conn))
{
var sql = ("SELECT * FROM \"" + PricingActiveCatagory.SelectedItem.ToString() + "\"");
using (SQLiteCommand cmdDataGrid = new SQLiteCommand(sql, conn))
{
da.SelectCommand = cmdDataGrid;
da.Fill(dt);
Pricing_view.DataContext = dt.DefaultView;
}
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
}
xml 数据网格
<DataGrid Grid.Row="1" Name="Pricing_view" AutoGenerateColumns="false" local:DataGridHelpers.UseCustomSort="True" ItemsSource="{Binding}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Filename}" Header="File Name" SortDirection="Ascending" local:DataGridHelpers.CustomSorterType="{x:Type local:StrLogicalComparer}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding FileTimeStamp}" Header="File Time Stamp"/>
<DataGridTextColumn Binding="{Binding dir}" Header="image Dir"/>
<DataGridTextColumn Binding="{Binding upc}" Header="Upc Dir"/>
<DataGridTextColumn Binding="{Binding price}" Header="Price"/>
</DataGrid.Columns>
</DataGrid>
任何助手都非常感谢 我尝试设置自定义排序的原因