Так что я пытаюсь выучить wpf и перекодировать ac # .net формы проекта в wpf. в то же время я пытаюсь исправить проблемы, которые у меня были с проектом форм. одним из которых является неправильная сортировка столбцов. есть столбец, который является буквенно-цифровым для основного столбца «filenames». я нашел пакет, который, как я думал, будет работать DataGrid CustomSorting , но в случае использования он выдает ошибку, и я не знаю, вызвано ли это тем, как я связываюсь с сеткой данных или чем-то другим. проект не имеет много документации.
строка кода с ошибкой
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());
}
}
}
xaml datagrid
<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>
Любые помощники высоко ценятся причина, по которой я пытаюсь настроить пользовательскую сортировку