Jan Kratochvil
Jan Kratochvil

Reputation: 2327

XamlParseException when referencing converter from different assembly

I have a XAML UserControl, which uses a converter contained in the same project.

xmlns:filter="clr-namespace:SampleModuleFilter" - namespace definition

So far so good. However, when I move the converter into another assembly and adjust the namespaces and references accordingly, I get the following exception: XamlParseException - "Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception. The inner exception states "The method or operation is not implemented." which is just weird. The namespace after the move into another library looks like this:

xmlns:filter="clr-namespace:SampleLibrary.Converters;assembly=SampleLibrary"

The converter resource definition is:

<filter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />

and I use it like so:

Visibility="{Binding DisplayLabel, Converter={StaticResource ResourceKey=boolToVisibilityConverter}}"

IntelliSense can obviously see the library, since it works ok (offers the converter class after I write the namespace prefix).

Any ideas what the problem might be?

Upvotes: 0

Views: 1534

Answers (4)

D.Rosado
D.Rosado

Reputation: 5773

Instead of just:

 xmlns:filter="clr-namespace:SampleModuleFilter"

Reference the assembly too

 xmlns:filter="clr-namespace:SampleModuleFilter;assembly=SampleModuleFilterAssemblyName"

That should do the trick.

Upvotes: 1

LoxLox
LoxLox

Reputation: 995

You have to reference your assembly also in the code-behind file.

If you reference the assembly only in the XAML part, the compiler returns a "failed to load xxx.dll" exception.

You have also to make a direct call to the connected assembly making something like this:

var dummy = new MyExternalAssemby.MyType();

or just this in a new line of code

new MyExternalAssemby.MyType();

without putting the result in a dummy variable.

Usually I do that in a static constructor. I think this is a bug in the XAML interpreter because the XAML is not compiled but just "translated" in the BAML (binary XAML). So, if you reference a type in XAML without creating an "hard" reference in the code behind the NET linker ignores it at all.

HTH Lorenzo

Upvotes: 1

Nicolas Repiquet
Nicolas Repiquet

Reputation: 9265

Is "SampleLibrary.dll" used somewhere in your code ?

I got a strange bug where referenced assemblies only used in xaml file are skipped at compile time, and do not appear in the dll dependencies.

Upvotes: 0

Joe
Joe

Reputation: 1305

That is strange; we have our converters all located in a central library, and it works fine. Assuming references and namespaces are correct, the only thing I could suggest would be to clean and rebuild the two projects in question.

Upvotes: 0

Related Questions