Я наткнулся на странную проблему. В моем окне WPF (.NET 4) у меня есть простой combobox (DisplayMemberPath = "Name" SelectedValuePath = "Id"). Когда я загружаю окно, я устанавливаю свойство ItemSource класса combobox в context.Currencies.ToList(), используя LINQ to SQL. Таблица Currency в SQL - это просто [Id] [uniqueidentifier] NOT NULL PRIMARY KEY, [Name] char NOT NULL. В .NET это переводится в Id = System.Guid, Name = System.String.Может ли WPF обрабатывать Guids от LINQ to SQL?
Проблема, с которой я столкнулась, заключается в том, что вызов combobox.ItemsSource = context.Currencies.ToList(); выдает исключение FormatException (Guid должно содержать 32 цифры с четырьмя тире (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)).
Что я не могу понять, почему эта ошибка возникла?
Если я оставляю LINQ to SQL на картинке, определите класс «тест» - открытый класс Test {public Guid Id; public string Name; }, установите comobox.ItemsSource в List<Test>
, который содержит некоторые записи, затем все работает.
Если я это сделать:
combobox.ItemsSource = context.Currencies.Select(c => new { c.Id.ToString(), c.Name }).ToList()
то все работает.
Я попытался установить культуру и UICulture текущей темы на «en-US» заранее (на всякий случай это проблема культуры, моя культура по умолчанию - «et-EE»), но это тоже не помогло.
Я посмотрел на созданные классы LINQ to SQL из конструктора, но не смог найти никаких свойств, которые могли бы помочь в этой ошибке.
Я что-то упустил или это действительно ошибка в .NET Framework? '
PS! Таблица валют содержит действительные записи (действительные Гиды).
Что происходит, когда вы не назначаете список в поле со списком, а просто вызываете 'context.Currencies.ToList();'? –
Тогда все в порядке. Я могу легко использовать список для какой-либо цели, например, я могу назначить его datagrid.ItemsSource не проблема ... Но combobox не нравится по какой-либо причине. – Marko
У вас есть привязка к 'SelectedValue'? –