WPF自定义控件和绑定属性

时间:2019-04-10 11:38:16

标签: c# wpf binding

我正在处理自定义ListView。在此范围内,我想定义一个具有CellBinding属性的自定义GridViewColumn,该属性本身就是BindingBase。

此属性的定义如下:

public class GridViewColumn : System.Windows.Controls.GridViewColumn
{
    public static readonly DependencyProperty CellBindingProperty = DependencyProperty.RegisterAttached( "CellBinding", typeof( BindingBase ), typeof( GridViewColumn ),
            new PropertyMetadata( null, new PropertyChangedCallback( OnCellBindingChanged ) ) );

    public BindingBase CellBinding
    {
        get => (BindingBase)this.GetValue( CellBindingProperty );
        set => this.SetValue( CellBindingProperty, value );
    }...

在xaml编辑器中一切正常,并且似乎可以正确识别此属性:

     <wpfTools:GridViewColumn Header="Titre2" SortProperty="B" CellAlignement="Right" CellBinding="{Binding B}"/>

但是当我想在运行时使用此属性时, column.CellBinding 的结果始终为null。 拜托,为什么?

1 个答案:

答案 0 :(得分:1)

如果应该将

CellBinding设置为BindingBase,则

{}不应该是依赖项属性。

您应该将其实现为CLR属性,然后实现GridViewColumn类以根据需要将绑定应用于生成的单元元素:

public class GridViewColumn : System.Windows.Controls.GridViewColumn
{
    private BindingBase _cellBinding;
    public BindingBase CellBinding
    {
        get => _cellBinding;
        set => _cellBinding = value;
    }
    //...
}

获取依赖属性的值会评估绑定BindingBase所不想要的绑定。