Используя метод, описанный здесь Я пытаюсь динамически строить столбцы DataTemplate.У меня проблема с определением моего собственного конвертера. Первая проблема связана с определением пространства имен моей собственной программы, потому что я получаю эту ошибку:
Тип 'RowIndexConverter' не найден, поскольку 'clr-namespace: LANOS.Models;сборка = LANOS 'не найдена.
В соответствии с решением, на котором я основывал свое приложение, для любого определенного пользователем пространства имен также требуется имя сборки.RowIndexConverter
принадлежит LANOS.Models
точно, опечаток нет.Класс принадлежит к основной сборке приложения (другими словами, он не является внешним).Так почему же тогда возникает проблема?
Вторая проблема заключается в том, что я не уверен, что мое определение преобразователя правильно с использованием этой техники.Я хочу получить эквивалент этого UserControl.Resources
:
<navigation:Page xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" x:Class="LANOS.Views.SRFEditor"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:model="clr-namespace:LANOS.Models"
mc:Ignorable="d"
d:DesignWidth="640" d:DesignHeight="480"
Title="SRFEditotr Page">
<UserControl.Resources>
<model:RowIndexConverter x:Key="rowIndexConverter"/>
<DataTemplate x:Key="myCellTemplate">
<TextBlock Text='{Binding Data, Mode=TwoWay, Converter={StaticResource rowIndexConverter}}' />
</DataTemplate>
</UserControl.Resources>
Код функции.
private string GenerateTextColumnXAML(string sortMemberKey)
{
StringBuilder CellTemp = new StringBuilder();
CellTemp.Append("<DataTemplate ");
CellTemp.Append("xmlns='http://schemas.microsoft.com/winfx/");
CellTemp.Append("2006/xaml/presentation' ");
CellTemp.Append("xmlns:model='clr-namespace:LANOS.Models; assembly=LANOS' ");
CellTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
CellTemp.Append("xmlns:basics='clr-namespace:System.Windows.Controls;");
CellTemp.Append("assembly=System.Windows.Controls' >");
CellTemp.Append("<Grid>");
CellTemp.Append("<Grid.Resources>");
CellTemp.Append("<model:RowIndexConverter x:Key='rowIndexConverter' />");
CellTemp.Append("</Grid.Resources>");
CellTemp.Append("<TextBlock Text='{Binding Data, Mode=TwoWay, Converter={StaticResource rowIndexConverter}, ConverterParameter=" + sortMemberKey + "}' />");
CellTemp.Append("</Grid>");
CellTemp.Append("</DataTemplate>");
return CellTemp.ToString();
}
Результат функции:
<DataTemplate
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:model='clr-namespace:LANOS.Models; assembly=LANOS'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:basics='clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls' >
<Grid>
<Grid.Resources><model:RowIndexConverter x:Key='rowIndexConverter' />
</Grid.Resources><TextBlock Text='{Binding Data, Mode=TwoWay, Converter={StaticResource rowIndexConverter}, ConverterParameter=GRID_ROW_ID}' />
</Grid>
</DataTemplate>