Что не так с моими свойствами зависимости? - PullRequest
0 голосов
/ 23 января 2010

У меня проблема с моим свойством зависимости. Кажется, что он вообще не хочет работать, и я не знаю почему. Вот код для моего свойства зависимости:

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 ]

1 голос
/ 25 января 2010

Мне нужно использовать DependencyPropertyMetaData при создании DependencyProperty для вызова PropertyChangedCallback для привязки к значению свойства зависимостей внутри моего пользовательского элемента управления. Конечно, это все еще в коде, но это работает.

1 голос
/ 23 января 2010

попробуй Visibility="{Binding CheckBoxColumnVisibility ElementName=computerControl}"

Это работает только на SL3 +

0 голосов
/ 23 января 2010

Вы можете использовать привязку ElementName в Silverlight 3. Вот пример, который может работать:

<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>

...