Я столкнулся с досадной ошибкой в конструкторе Wpf Xaml ResourceDictionary
, когда типы не перестраиваются вместе с проектом.То есть все типы взяты из ранее созданной сборки и поэтому никогда не будут совпадать при сравнении типов.
У меня есть проект с настраиваемым списком пользовательских типов в словаре ресурсов, и мне нужнопривести к этим типам для вещей, чтобы работать правильно.Но каждый раз, когда я перестраиваюсь с изменениями, конструктор сохраняет старые типы и делает представление времени разработки бесполезным.
Я обнаружил, что изменение списка исправит исключение, но с этим приходится сталкиватьсяэто для каждого настраиваемого списка после каждой сборки, есть ли обходной путь для этой проблемы?
Пример кода, который воспроизводит ошибку:
Создать новый Wpf-проект.
Добавить следующие файлы ...
ItemCollection.cs
using System.Collections.ObjectModel;
namespace XamlTest {
public class ItemCollection : ObservableCollection<Item> {
}
public class Item {
}
}
ItemsList.xaml (ResourceDictionary)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XamlTest">
<local:ItemCollection x:Key="ItemsList">
<local:Item />
<local:Item />
<local:Item />
</local:ItemCollection>
</ResourceDictionary>
Построить один раз.
Измените число Item
s в списке с помощью копирования, вставки и построения.
Повторяйте шаг 4. до тех пор, пока не произойдет исключение.
Исключение: The value "XamlTest.Item" is not of type "XamlTest.Item" and cannot be used in this generic collection. Parameter name: value