Ошибка «свойство присоединения не найдено в типе» при использовании свойства зависимости в Silverlight - PullRequest
3 голосов
/ 20 ноября 2011

Я пытаюсь создать несколько примеров приложений для использования свойства зависимости в DataGrid, но при попытке запустить приложение я получаю исключение времени выполнения

Присоединяемое свойство SelectedColumnIndex не былонаходится в типе CustomDependencyProperty.[Строка: 17 Позиция: 74]

Это код, который я использовал для объявления моего свойства зависимости

public class CustomDependencyProperty : DataGrid
{

    public static DependencyProperty SelectedColumnIndexProperty = DependencyProperty.Register("SelectedColumnIndex",
                                                                                                 typeof(object),
                                                                                                 typeof(DataGrid),
                                                                                                 new PropertyMetadata(0));

    public int SelectedColumnIndex
    {
        get
        {
            return (int)GetValue(SelectedColumnIndexProperty);
        }

        set
        {
            SetValue(SelectedColumnIndexProperty, value);
        }
    }
}

И это мой код XAML

<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  x:Class="BindingDictionary.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:local="clr-namespace:BindingDictionary"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <UserControl.Resources>
        <local:SimpleConverter x:Key="myConverter"></local:SimpleConverter>
    </UserControl.Resources>
        <Grid x:Name="LayoutRoot" Background="White">
        <sdk:DataGrid x:Name="dataGrid"
                      AutoGenerateColumns="True"
                      ItemsSource="{Binding Responses}" 
                      local:CustomDependencyProperty.SelectedColumnIndex="{Binding Index,Mode=TwoWay}">
        </sdk:DataGrid>
        <TextBlock x:Name="DisplayIndex" Text="{Binding Index}" />
    </Grid>
</UserControl>

Я не могу понять, в чем именно заключается проблема. Что-то не так в том, как я объявляю свойство зависимостей?

Пожалуйста, помогите.

Спасибо, Алекс

Ответы [ 2 ]

4 голосов
/ 20 ноября 2011

Я думаю, вам нужно прикрепленное свойство здесь.Попробуйте изменить

DependencyProperty.Register

на

DependencyProperty.RegisterAttached.

Также typeof(object) should be typeof(int).

ОБНОВЛЕНИЕ

Да, вышеизложенное решит вашу проблему, но я думаю, что вам не нужно здесь присоединенное свойство, поскольку ваш класс расширяет класс DataGrid.Обычное свойство зависимости - это все, что вам нужно.Так что сохраните свой существующий код и измените

typeof(object),typeof(DataGrid), 

на

typeof(int),typeof(CustomDependencyProperty), 

, и в вашем xaml вы можете просто использовать этот расширенный класс напрямую, что-то вроде этого,

<local:CustomDependencyProperty SelectedColumnIndex="{Binding Index,Mode=TwoWay}">

Возможно, вы захотите изменить имя «CustomDependencyProperty» на что-то более значимое, например ExtendedDataGrid.

Поэтому я считаю, что у вас обычно есть два способа создания привязываемого свойства, либо путем расширенияуправление и создание обычного свойства зависимостей, либо путем создания статического класса с присоединенным свойством.

Надеюсь, это поможет.:)

2 голосов
/ 20 ноября 2011

Я думаю, что могу ответить на этот вопрос сейчас. Это исключение просто объясняет, что именно является разницей между AttachedProperty и DependencyProperty.

Чтобы использовать свойство зависимости SelectedColumnIndex Я должен переопределить мой DataGrid xaml вот так

<local:CustomDependencyProperty x:Name="customGrid" 
                                 AutoGenerateColumns="True" 
                                 ItemsSource="{Binding Responses}" 
                                 SelectedColumnIndex="{Binding Index, Mode=TwoWay}">
</local:CustomDependencyProperty> 
...