首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows 8 ContentProperty不工作

Windows 8 ContentProperty不工作
EN

Stack Overflow用户
提问于 2012-10-01 12:03:31
回答 1查看 676关注 0票数 1

我在我的一个类上设置了一个ContentProperty,但是当我用XAML编码时,它会生成一个XAMLParseException。我想知道有没有人能给我一些建议。

代码隐藏:

代码语言:javascript
复制
[ContentProperty(Name="Converters")]
class ChainedValueConverter: DependencyObject, IValueConverter
{
    public static readonly DependencyProperty ConvertersProperty = DependencyProperty.Register("Converters", typeof(ObservableCollection<IValueConverter>), typeof(ChainedValueConverter), null);

    public ChainedValueConverter()
    {
        SetValue(ConvertersProperty, new ObservableCollection<IValueConverter>());
    }

    public ObservableCollection<IValueConverter> Converters
    {
        get
        {
            return (ObservableCollection<IValueConverter>)GetValue(ConvertersProperty);
        }
    }

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        object _cValue = value;
        foreach (IValueConverter converter in Converters)
        {
            _cValue = converter.Convert(_cValue, targetType, parameter, language);
            if (_cValue == DependencyProperty.UnsetValue)
                break;
        }
        return _cValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        object _cValue = value;
        foreach (IValueConverter converter in Converters)
        {
            _cValue = converter.ConvertBack(_cValue, targetType, parameter, language);
            if (_cValue == DependencyProperty.UnsetValue)
                break;
        }
        return _cValue;
    }
}
/// <summary>
/// Converts boolean value to visibility.
/// </summary>
class BooleanToVisibilityConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (Boolean)value ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (Visibility)value == Visibility.Visible ? true : false;
    }
}

XAML:

代码语言:javascript
复制
<common:ChainedValueConverter x:Key="A">
            <common:BooleanToVisibilityConverter />
    </common:ChainedValueConverter>

当ran生成带有WinRT信息的XamlParseException时,上面的代码是: E_UNKNOWN_ERROR

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-01 17:06:08

我真的很喜欢你的链式转换器的想法,并试图找到一个解决方案。看起来你只需要在构造函数中初始化你的集合(创建一个新实例)。请看我的实现:

代码语言:javascript
复制
[ContentProperty(Name = "Converters")]
public class ChainedConverter : DependencyObject, IValueConverter
{
    public ChainedConverter()
    {
        Converters = new ObservableCollection<IValueConverter>();
    }

    public static readonly DependencyProperty ConvertersProperty =
        DependencyProperty.Register("Converters", typeof (ObservableCollection<IValueConverter>), 
        typeof (ChainedConverter), new PropertyMetadata(default(ObservableCollection<IValueConverter>)));

    public ObservableCollection<IValueConverter> Converters
    {
        get { return (ObservableCollection<IValueConverter>) GetValue(ConvertersProperty); }
        set { SetValue(ConvertersProperty, value); }
    }

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        foreach (var c in Converters)
            value = c.Convert(value, targetType, parameter, language);
        return value; 
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        foreach (var c in Converters)
            value = c.ConvertBack(value, targetType, parameter, language);
        return value; 
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12667401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档