【发布时间】:2017-02-01 13:18:06
【问题描述】:
我有一个名为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”无法识别或无法访问。
在“BranchFilter”类型中找不到属性“BranchId”。
XML 命名空间中不存在属性“BranchId” 'clr-namespace:ApptBook.Client.Modules.Common.Controls'
我遵循了每个示例,但它们都是相同的,用于添加依赖属性,但我尝试的一切都失败了。这么简单的事情有什么问题?
【问题讨论】:
-
我猜应该是LocalBranchIdProperty
-
使用
propdpcode-sn-p生成依赖属性正确。 -
@Sinatr 我没有 sn-p。
-
@ProfK,我相信你有。键入
propdp并按两次Tab键。 -
请注意,正确的依赖属性声明需要一个 CLR 属性包装器,该包装器在其 get 和 set 访问器中调用
GetValue和SetValue。您不能声明包装 CLR 属性的依赖项属性。见Custom Dependency Properties。
标签: c# wpf user-controls dependency-properties