Value Converter无法使用caliburn.micro

时间:2015-06-02 15:31:55

标签: c# windows-runtime caliburn.micro

我正在构建一个windows8.1应用程序,并试图篡改caliburn.micro的ConventionManager。我想启用与ValueConverters绑定的名称约定。 更具体地说,我有一个ProductViewModels集合,它有两个属性Value和IsValid。我想通过ValueConverter将Value属性绑定到textblock,并将IsValid属性绑定到Border的BorderColorBrush。

这是我在app.xaml.cs中配置的代码

 var oldApplyConverterFunc = ConventionManager.ApplyValueConverter;
        ConventionManager.ApplyValueConverter = (binding, bindableProperty, property) =>
        {
            if (bindableProperty == Control.BorderBrushProperty && typeof(bool).IsAssignableFrom(property.PropertyType))
                //                                ^^^^^^^           ^^^^^^
                //                             Property in XAML     Property in view-model
                binding.Converter = booleanToBrush;
            //                  ^^^^^^^^^^^^^^^^^^^^^^^^^
            //                 My converter used here. Code never reaches this point

            // else I use the default converter
            else if (bindableProperty == TextBlock.TextProperty && typeof(int).IsAssignableFrom(property.PropertyType))
            {
                //Code reaches this point when it should.
                oldApplyConverterFunc(binding, bindableProperty, property);
            }
            else
            {
                oldApplyConverterFunc(binding, bindableProperty, property);
            }


        };

问题是程序永远不会进入第一个if子句。有谁知道为什么???

我的VM和xaml就是这些。

 public class ProductViewModel
{
    public ProductViewModel(int value)
    {
        _value = value;           
    }

    private int _value;
    public int Value
    {
        get { return _value; }
        set
        {
            _value = value;                
        }
    }

    private bool _isValid;
    public bool IsValid
    {
        get 
        {
            _isValid = some validation logic;
            return _isValid; 
        }          
    }        
}

视图是用户控件

<Border x:Name="IsValid">
    <TextBlock x:Name="Value"/>
</Border>

0 个答案:

没有答案