2017-02-01 50 views
0

我有一个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”

我按照每一个例子,但它们都是一样的,用于添加依赖项属性,但我尝试过的所有内容都失败了。如此简单的事情可能会出错?

+2

我想它应该是LocalBranchIdProperty –

+1

使用'propdp'代码片段正确生成依赖项属性*。 – Sinatr

+0

@Sinatr我没有片段。 – ProfK

回答

2

如果你不使用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> 

我还要重新命名BranchIdPropertyDependencyPropertyLocalBranchIdProperty

+0

啊,是的。我误解了依赖属性注册来创建POCO属性的包装,但它实际上将POCO属性注册为依赖属性,所以我仍应该访问POCO属性,并且它将具有依赖属性的行为。 – ProfK

1

你应该正确声明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; 
    ... 
} 
相关问题