Я создал собственный конвертер, который выполняет преобразование значений на основе настроенного сопоставления. Это выглядит, как показано нижеМой преобразователь настраиваемых значений приводит к сбою инструмента проверки XAML
public class UniversalConverter : List<ConverterItem>, IValueConverter
{
private bool useDefaultValue;
private object defaultValue;
public object DefaultValue
{
get { 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 be converted and default value is 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 be converted back", value));
}
}
public class ConverterItem
{
public object From { get; set; }
public object To { get; set; }
}
public class ConversionException : Exception
{
public ConversionException() { }
public ConversionException(string message) : base(message) { }
}
Образец XAML ниже
<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>
Теперь все строит и работает нормально, но если я использую его XAML Visual Studio подчеркивает весь файл с пышными голубыми линиями и показывает два вида ошибки:
1) Если преобразователь введен в ResourceDictionary
, и ему выделяется x:Key
приписывать это показывает Missing key value on 'UniversalConverter' object
2) Если я назначу DefaultValue
свойство любого значения (например {x:Null}
) сообщение является XAML Node Stream: Missing EndMember for 'StuffLib.UniversalConverter.{http://schemas.microsoft.com/winfx/2006/xaml}_Items' before StartMember 'StuffLib.UniversalConverter.DefaultValue'
Что является причиной этих сообщений? Я могу жить с ними, но они скрывают все другие компиляторы и маркировки ReSharper.
Не могли бы вы опубликовать свой код XAML? – Domysee
Вам нужно разделить полный код, иначе мы не сможем определить, где ошибка – Liero
@ Dominik действительно не имеет значения, какую логику преобразования я использую. Даже если я просто напишу 'return DependecyProperty.UnsetValue', я все еще вижу это подчеркивание – Demarsch