我的依赖属性有什么问题?

时间:2010-01-22 21:57:05

标签: silverlight silverlight-3.0 dependency-properties

我的依赖属性有问题。好像它根本不想工作,我不知道为什么。这是我的依赖属性的代码:

public static readonly DependencyProperty CheckBoxColumnVisibilityProperty =
    DependencyProperty.Register("CheckBoxColumnVisibility", typeof(Visibility), typeof(ComputersControl), null);

public Visibility CheckBoxColumnVisibility
{
    get
    {
        return (Visibility)GetValue(CheckBoxColumnVisibilityProperty);
    }
    set
    {
        SetValue(CheckBoxColumnVisibilityProperty, value);
    }
}

这是我分配我的依赖属性值的地方:

  <ComputerControl:ComputersControl Canvas.Left="50" BorderBrush="Black" Background="Blue" Name="computerControl" CheckBoxColumnVisibility="Collapsed" />

以下是我尝试将其绑定到DataGrid中的列的位置,以便我可以将该列设置为可见或折叠:

<Data:DataGrid.Columns>
  <Data:DataGridTemplateColumn 
    x:Name="CheckBoxColumn"
    Visibility="{Binding CheckBoxColumnVisibility}"
    Header="Selected">
      <Data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <CheckBox x:Name="DataGridCheckBox"
            Click="DataGridCheckBox_Click"
            IsChecked="{Binding IsSelected, Mode=TwoWay}" 
            HorizontalAlignment="Center" />
        </DataTemplate>
      </Data:DataGridTemplateColumn.CellTemplate>
  </Data:DataGridTemplateColumn>

有人可以告诉我为什么它不起作用吗?我看到的每个例子看起来都与此完全相同,但我的工作不起作用......

3 个答案:

答案 0 :(得分:1)

尝试Visibility="{Binding CheckBoxColumnVisibility ElementName=computerControl}"

这仅适用于SL3 +

答案 1 :(得分:1)

当我创建DependencyProperty来调用PropertyChangedCallback以便绑定到我的用户控件中的依赖项属性的值时,我必须使用DependencyPropertyMetaData。当然这仍然在代码中,但它确实有效。

答案 2 :(得分:0)

您可以在Silverlight 3中使用ElementName绑定。以下是可能有效的示例:

<ComputerControl:ComputersControl Canvas.Left="50" BorderBrush="Black" Background="Blue" Name="computerControl" CheckBoxColumnVisibility="Collapsed" />

...


<Data:DataGridTemplateColumn 
x:Name="CheckBoxColumn"
Visibility="{Binding Path=CheckBoxColumnVisibility, ElementName=computerControl}"
Header="Selected">
  <Data:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <CheckBox x:Name="DataGridCheckBox"
        Click="DataGridCheckBox_Click"
        IsChecked="{Binding IsSelected, Mode=TwoWay}" 
        HorizontalAlignment="Center" />
    </DataTemplate>
  </Data:DataGridTemplateColumn.CellTemplate>