2010-11-14 2 views
0

Я наткнулся на странную проблему. В моем окне 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! Таблица валют содержит действительные записи (действительные Гиды).

+0

Что происходит, когда вы не назначаете список в поле со списком, а просто вызываете 'context.Currencies.ToList();'? –

+0

Тогда все в порядке. Я могу легко использовать список для какой-либо цели, например, я могу назначить его datagrid.ItemsSource не проблема ... Но combobox не нравится по какой-либо причине. – Marko

+0

У вас есть привязка к 'SelectedValue'? –

ответ

0

Как указал Томас, у меня была привязка к SelectedValue, и оказалось, что в binding также содержится FallbackValue = 1. После удаления резервной собственности все работает. Свойство было прокручено вне поля зрения, так что действительно это было то, что я пропустил.

Смежные вопросы