为什么我的自定义UserControl的依赖项属性无法识别?
我有一个UserControl
称为BranchFilter
,具有以下特性:为什么我的自定义UserControl的依赖项属性无法识别?
private int? _branchId;
public int? LocalBranchId
{
get { return _branchId; }
set
{
SetProperty(ref _branchId, value);
OnBranchChanged();
}
}
在相同的控制,我注册了一个依赖属性,这样我可以分支ID绑定到视图模型:
public static readonly DependencyProperty BranchIdProperty = DependencyProperty.Register(nameof(LocalBranchId), typeof(int?), typeof(BranchFilter), new UIPropertyMetadata(null));
当我尝试访问这个属性,甚至没有绑定它,在一个视图中,像这样:
<controls:BranchFilter Grid.Row="0" BranchId="0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="BranchChanged">
<i:InvokeCommandAction Command="{Binding LoadItems}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</controls:BranchFilter>
我得到编译错误:
成员“BranchId”无法识别或无法访问。
属性“BranchId”中未发现型“BranchFilter”。
属性“BranchId”不存在XML命名空间存在 “CLR的命名空间:ApptBook.Client.Modules.Common.Controls”
我按照每一个例子,但它们都是一样的,用于添加依赖项属性,但我尝试过的所有内容都失败了。如此简单的事情可能会出错?
如果你不使用LocalBranchId
代替BranchId
来访问它?
<controls:BranchFilter Grid.Row="0" LocalBranchId="0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="BranchChanged">
<i:InvokeCommandAction Command="{Binding LoadItems}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</controls:BranchFilter>
我还要重新命名BranchIdProperty
的DependencyProperty
到LocalBranchIdProperty
。
啊,是的。我误解了依赖属性注册来创建POCO属性的包装,但它实际上将POCO属性注册为依赖属性,所以我仍应该访问POCO属性,并且它将具有依赖属性的行为。 – ProfK
你应该正确声明LocalBranchId
作为一个依赖属性:
public static readonly DependencyProperty LocalBranchIdProperty =
DependencyProperty.Register(
nameof(LocalBranchId), typeof(int?), typeof(BranchFilter));
public int? LocalBranchId
{
get { return (int?)GetValue(LocalBranchIdProperty); }
set { SetValue(LocalBranchIdProperty, value); }
}
如果你需要得到通知当属性值的变化,则可以通过PropertyMetadata注册 PropertyChangedCallback:
public static readonly DependencyProperty LocalBranchIdProperty =
DependencyProperty.Register(
nameof(LocalBranchId), typeof(int?), typeof(BranchFilter),
new PropertyMetadata(LocalBranchIdPropertyChanged));
public int? LocalBranchId
{
get { return (int?)GetValue(LocalBranchIdProperty); }
set { SetValue(LocalBranchIdProperty, value); }
}
private static void LocalBranchIdPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var control = (BranchFilter)obj;
var id = (int?)e.NewValue;
...
}
我想它应该是LocalBranchIdProperty –
使用'propdp'代码片段正确生成依赖项属性*。 – Sinatr
@Sinatr我没有片段。 – ProfK