Я пытаюсь загрузить XAML динамически из строки / файла. Проблема в том, что XAML содержит некоторые ссылки для пользовательских конвертеров, и при загрузке происходит сбой с ошибкой
System.Windows.Markup.XamlParseException: '' Невозможно создать неизвестный тип '{clr-namespace: DataGridApp.Converter} CollectionConverter'
Мой динамический XAML прост
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converter="clr-namespace:DataGridApp.Converter">
<UserControl.Resources>
<converter:CollectionConverter x:Key="CollectionConverter"/>
</UserControl.Resources>
<Grid>
<DataGrid
ItemsSource='{Binding Path=dynamicProperty, Converter={StaticResource CollectionConverter}}'/>
</Grid>
</UserControl>
C # код для динамического чтения XAML
private FrameworkElement LoadViewFromMemory(string template)
{
using (Stream s = new MemoryStream(Encoding.Default.GetBytes(template)))
{
return XamlReader.Load(s) as FrameworkElement;
}
}
Преобразователь класса просто преобразует любой объект в коллекцию объектов
public class CollectionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
List<dynamic> d = new List<dynamic> {value};
return d;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return false;
}
}
Есть ли способ динамически загружать XAML с конвертерами?
Ответ:
Как подсказывает @mike, мне нужно добавить ссылку на сборку в пространстве имен XAML clr для конвертера
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converter="clr-namespace:DataGridApp.Converter;assembly=DataGridAppProj">