Динамически загружать XAML с помощью пользовательских конвертеров, определенных в атрибутах XAML - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь загрузить 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">  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...