c# - My custom value converter causes XAML validation tool to fail -
i've created custom converter performs converting of values based on configured mapping. looks below
public class universalconverter : list<converteritem>, ivalueconverter { private bool usedefaultvalue; private object defaultvalue; public object defaultvalue { { return defaultvalue; } set { defaultvalue = value; usedefaultvalue = true; } } public object convert(object value, type targettype, object parameter, cultureinfo culture) { foreach (var item in this) if (equals(item.from, value)) return item.to; if (usedefaultvalue) return defaultvalue; throw new conversionexception(string.format("value {0} can't converted , default value not allowed", value)); } public object convertback(object value, type targettype, object parameter, cultureinfo culture) { foreach (var item in this) if (equals(item.to, value)) return item.from; throw new conversionexception(string.format("value {0} can't converted back", value)); } } public class converteritem { public object { get; set; } public object { get; set; } } public class conversionexception : exception { public conversionexception() { } public conversionexception(string message) : base(message) { } } sample xaml below
<core:universalconverter x:key="itemcounttovisiblityconverter" defaultvalue="{x:static visibility.collapsed}"> <core:converteritem to="{x:static visibility.visible}"> <core:converteritem.from> <system:int32>0</system:int32> </core:converteritem.from> </core:converteritem> </core:universalconverter> now builds , works fine, if use xaml visual studio underscores whole file curvy blue lines , shows 2 kind of mistakes:
1) if converter put resourcedictionary , assigned x:key attribute shows missing key value on 'universalconverter' object
2) if assign defaultvalue property value (e.g {x:null}) message xaml node stream: missing endmember 'stufflib.universalconverter.{http://schemas.microsoft.com/winfx/2006/xaml}_items' before startmember 'stufflib.universalconverter.defaultvalue'
what reason messages? can live them hide other compiler , resharper markings
don't inherit list, create items property in converter:
[contentproperty("items")] public class universalconverter : ivalueconverter { public converteritem[] items { get; set; } public object defaultvalue { get; set; } //all other stuff goes here } and xaml:
<l:universalconverter x:key="myconverter"> <x:array type="l:converteritem"> <l:converteritem from="..." to="..." />
Comments
Post a Comment