使用XamlReader.Parse()从字符串读取xaml时使用转换器

时间:2015-03-20 20:24:16

标签: c# wpf xaml

我正在尝试使用XamlReader.Parse()和此代码加载此xaml:

<helpers:FilterDataGrid 
    xmlns:helpers="clr-namespace:URM.Helpers;assembly=URM"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:grid="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:convert="clr-namespace:URM.Converters;assembly=URM"
    ItemsSource ="{Binding PendingContracts}"
    AutoGenerateColumns="False" 
    Margin="20,0,10,0"
    Height ="Auto" 
    Width ="Auto">

    <helpers:FilterDataGrid.Resources> 
         <convert:DateConverter x:Key="DateConverter"/>
    </helpers:FilterDataGrid.Resources>

    <helpers:FilterDataGrid.Columns>
         <grid:DataGridTextColumn Header="Contract Id" Binding="{Binding ContractId}" />
         <grid:DataGridTextColumn Header="Date Submitted" Binding="{Binding DateSubmitted, {StaticResource DateConverter}}" />
         <grid:DataGridTextColumn Header="Submitted By" Binding="{Binding Submitted_by}" />
         <grid:DataGridTextColumn Header="Company Name" Binding="{Binding Proprietors_Company_Name}" />
         <grid:DataGridTextColumn Header="Term Of Contract" Binding="{Binding TermOfContact}" />
    </helpers:FilterDataGrid.columns>

</helpers:FilterDataGrid>

如何添加转换器。我已经添加了转换器的命名空间,但我不断收到此错误:

'无法创建未知类型'{clr-namespace:URM.Converters; assembly = URM} DateConverter'。'

我添加了这与添加所有其他名称空间的方式相同。

编辑:解析代码

private void Initialize()
        {
            using (var sp = new SilentPartnerDataContext())
            {
                try {
                    PendingContracts = new ObservableCollection<SalesContract>(GetAllContracts());
                    string data = sp.XamlExpressions.Single(c => c.UserControlName == "PendingContracts").XamlText;
                    ContractContent = XamlReader.Parse(data) as FrameworkElement;
                }
                catch(Exception)
                {
                    MessageBox.Show("Unable to show data");
                }
            }
        }

1 个答案:

答案 0 :(得分:2)

确保DateConverter类是公共的:

public class DateConverter : IValueConverter
{
    ...
}