在Silverlight中使用依赖项属性时出现“在类型中找不到可附加属性”错误

时间:2011-11-20 07:01:49

标签: silverlight silverlight-4.0 mvvm dependency-properties attached-properties

我正在尝试使用一些示例应用程序在DataGrid中使用Dependency Property,但是当我尝试运行应用程序时,我遇到了运行时异常

  

在类型中找不到可附加属性'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 个答案:

答案 0 :(得分:4)

我认为你需要attached property。尝试更改

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更有意义的内容。

所以我认为结论是你通常有两种创建可绑定属性的方法,可以通过扩展控件和创建普通的依赖属性,也可以创建一个带附加属性的静态类。

希望这会有所帮助。 :)

答案 1 :(得分:2)

我想我现在可以回答这个问题。这个例外只是解释了AttachedPropertyDependencyProperty之间的差异究竟是什么。

要使用依赖项属性 SelectedColumnIndex ,我应该像这样重新定义DataGrid xaml

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