我正在尝试使用一些示例应用程序在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>
我无法弄清楚问题是什么。我申报依赖属性的方式有什么不对吗?
请帮忙。
谢谢, 亚历
答案 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)
我想我现在可以回答这个问题。这个例外只是解释了AttachedProperty
和DependencyProperty
之间的差异究竟是什么。
要使用依赖项属性 SelectedColumnIndex ,我应该像这样重新定义DataGrid
xaml
<local:CustomDependencyProperty x:Name="customGrid"
AutoGenerateColumns="True"
ItemsSource="{Binding Responses}"
SelectedColumnIndex="{Binding Index, Mode=TwoWay}">
</local:CustomDependencyProperty>