我正在构建一个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>